[英]Open system call is not working as expected
我正在下面尝试此代码。
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
int fd;
char filename[10];
printf("enter the file name\n");
scanf("%s",filename);
fd=open(filename,O_RDONLY|O_CREAT|O_TRUNC,S_IRUSR);
if(fd==-1)
{
printf("error opening file\n");
}
else
{
printf("file opened successfully\n");
}
return 0;
}
在这里,我是设置文件的权限,以便只有用户才能阅读。 当我第一次执行此代码时,它按预期工作,但是第二次显示错误消息。我的疑问是为什么它会给出错误消息,因为我已经将所需的权限模式设置为与标志模式同步。
问题是打开标志的特定组合。 您的意思是:
O_CREAT
) O_TRUNC
) S_IRUSR
) 下次尝试打开它时,由于它已经存在,因此open
将尝试截断它。 但是,截断将失败,因为您仅对该文件具有读取权限。
解决此问题的一种简单方法是指定更具包容性的权限,即0700
。
一种简单的诊断方法(通常是一种好的做法)是在系统调用失败后检查errno
。 (例如perror
将提供人类可读的错误消息。)您将看到EACCES调用失败,记录为“指定O_TRUNC且拒绝写许可权时发生”。 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.