找回密码
 注册
关于网站域名变更的通知
查看: 420|回复: 1
打印 上一主题 下一主题

Linux 对文件删除函数unlink的操作

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-7-22 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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# {( u
5 {: ?$ 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 22:32 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表