程序1
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
int fd1, fd2;
fd1 = open("dup1.txt", O_RDWR | O_CREAT| S_IREAD | S_IWRITE);
printf("\nOriginal fd = %d", fd1);
if(fd1 == -1){
printf("\nFATAL Error\n");
exit(1);
}
}
程序2
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
int fd1, fd2;
fd1 = open("dup1.txt", O_RDWR | O_CREAT, S_IREAD | S_IWRITE);
printf("\nOriginal fd = %d", fd1);
if(fd1 == -1){
printf("\nFATAL Error\n");
exit(1);
}
}
程序1返回FD,1,如果文件已经存在(当它不工作时很好),但是第一个程序下的程序2工作得很好。区别在于选项标志的位置。
最佳答案
在我的机器上,S_IWRITE
的值与O_EXCL
的值相同。程序:
int main() {
printf("%x %x\n", S_IREAD, S_IWRITE);
printf("%x\n", O_EXCL);
return 0;
}
给予:
100 80
80
因此,我想,将旗
S_IWRITE
与O_CREAT
现在指定的效果与O_CREAT | O_EXCL
相同,如果文件已经存在,这会导致open
失败。但是,我认为您应该正确使用系统调用的参数。