C系统调用open / read / write / close和O_CREAT | O_EXCL
给出以下代码(它应该在“helloworld”文件中编写“helloworld”,然后阅读文本):
#include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #define FNAME "helloworld" int main(){ int filedes,nbytes; char buf[128]; /* Creates a file */ if((filedes=open(FNAME,O_CREAT | O_EXCL | O_WRONLY | O_APPEND,S_IRUSR | S_IWUSR)) == -1){ write(2,"Error1n",7); } /* Writes hello world to file */ if(write(filedes,FNAME,10) != 10) write(2,"Error2n",7); /* Close file */ close(filedes); if((filedes = open(FNAME,O_RDONLY))==-1) write(2,"Error3n",7); /* Prints file contents on screen */ if((nbytes=read(filedes,buf,128)) == -1) write(2,"Error4n",7); if(write(1,nbytes) != nbytes) write(2,"Error5n",7); /* Close file after read */ close(filedes); return (0); } 我第一次运行程序时,输出是: helloworld 之后每次运行程序时,输出为: Error1 Error2 helloworld 我不明白为什么没有附加文本,因为我已经指定了O_APPEND文件. 解决方法
O_EXCL强制创建文件.如果文件已存在,则调用失败.
它用于确保必须创建文件,并在第三个参数中传递给定的权限.简而言之,您有以下选择: > O_CREAT:如果文件尚不存在,则使用给定的权限创建文件.如果该文件存在,则会打开该文件并忽略权限. 来自the manual page的更多信息:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |