繁体   English   中英

开放系统调用未按预期工作

[英]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
  • 将其权限设置为0400S_IRUSR

下次尝试打开它时,由于它已经存在,因此open将尝试截断它。 但是,截断将失败,因为您仅对该文件具有读取权限。

解决此问题的一种简单方法是指定更具包容性的权限,即0700

一种简单的诊断方法(通常是一种好的做法)是在系统调用失败后检查errno (例如perror将提供人类可读的错误消息。)您将看到EACCES调用失败,记录为“指定O_TRUNC且拒绝写许可权时发生”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM