EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
看了unlink()函数是对文件的删除,于是写了一个函数进行测试之,结果发现在调用了unlink以后仍然可以对文件进行读写操作,又看了一下书才明白是我没有明白unlink函数的真正含义:删除目录相并减少一个连接数,如果链接数为0并且没有任何进程打开该文件,该文件内容才能被真正删除,但是若又进程打开了该文件,则文件暂时不删除直到所有打开该文件的进程都结束时文件才能被删除。 测试代码:
& N. B2 w; o( Y8 H; `. h/ p! ~' [2 @
点击(此处)折叠或打开
# p: |3 v) A. R- #include<stdio.h>6 P( o9 L2 I5 i
- #include<sys/types.h>% c. c" S" c% E$ Q# T3 y9 ?- H
- #include<sys/stat.h>& F; h3 ~: G8 j4 J/ z+ H* V
- #include<fcntl.h>6 w- h) L+ c% d; Q/ v$ H
- #include<unistd.h>
* a3 [* `9 N2 K7 W; v1 ] - int main()
; u' D8 H7 p+ w/ Q+ d$ H8 G+ [ - {% T+ p: |# n$ q" [+ S
- int fd;
T: @! y( z1 O! s - char buf[32];4 ?" q; i7 E) w Q: U( ]
- struct stat buff;2 d- l! M# h \# ]) `! N D
- , c- v+ f% s) n1 Z
- if((fd=open("temp.txt",O_RDWR|O_CREAT|O_TRUNC,S_IRWXU))<0){
8 X4 M3 h; Y {1 N - printf("create file error!\n");& \& s) O) y) _# L
- }
1 m @5 y- e1 w& P! I - stat("temp.txt",&buff);
- H& x. H: _2 T& f# P+ `0 h# ] - printf("temp.link=%d\n",buff.st_nlink);& j: O# R( f3 U' U ?9 `( z! {9 H
- link("temp.txt","test.txt");8 q5 n4 {" k+ _3 R: L; T. i) X
- stat("test.txt",&buff);
" G5 ^) L; _, W* w8 H2 d - printf("after link the tem.link =%d\n",buff.st_nlink);5 q( R4 Q6 I% n5 }4 u/ Z
- if(unlink("temp.txt")<0){( Q8 h' I2 ]' J/ m" f) Q
- printf("unlink error !\n");* k+ N7 i; O0 i7 R; h: X: a# d
- }
; r& ]+ ?, ~/ N1 m! e% }5 u - stat("temp.txt",&buff);$ w& p: J j- @
- printf("after unlink tem.link=%d\n",buff.st_nlink);) K% g6 N" I8 X3 K5 b; Q" M F
- if(write(fd,"temp",5)<0){8 }) ?+ g9 P' q5 y# S
- printf("write wrror!\n");. e! l& w( O, D
- }8 G; Z' K2 _; w0 I
- if((lseek(fd,0,SEEK_SET))==-1){
# Q' r9 @* S. Y* \# v - printf("lseek error!\n");
2 l4 U2 e! o( v/ c, y - }
' x$ _0 ~+ y7 w - if((read(fd,buf,5))<0){
$ g* ?& C& v( O, f8 h' r" d# V2 Q - printf("read error!\n");
' G; @( R% W8 @ - }
; |. z; \9 v4 \# M/ R8 U - printf("%s\n",buf); X O, ^& F3 z% B) R9 B
- return 0;: D& h; P2 b1 a7 N/ y8 G; c
- }
* N# i. R& B0 u& G. g( k : W0 ]0 K6 R8 x, b
6 J4 `. {3 x* g1 H, W$ D8 r% q: Q! x
! Q( w6 O6 T) [# E m0 b
1 @' T: ?: p5 V5 D* E+ q$ ?
( w3 B; B; k3 |. v- u# {( u5 {: ?$ l: c# z* _, ~7 F' ?; L
4 s9 [* G1 Y$ [4 v+ h8 r0 U { N1 G' R* B; I v: j$ ~ _4 V
3 S+ B! K6 f7 {$ P
|