繁体   English   中英

文件存在时fopen失败

[英]fopen fails when file exists

我在一个庞大的Linux守护进程中运行了以下代码片段。 我正在尝试调试日志文件,但是当日志文件存在时, fopen失败

if ( ( debugFILE = fopen( "/home/lala/debug.log", "a" ) ) == NULL )
{
    perror("error: ");
}

我得到的错误是:“权限被拒绝”。

这是特定文件的ls的输出:

----rw---- 1 lala lala 0 Mar 11 18:26 debug.log

首先,为什么文件是在具有这些权限的第一个位置创建的。 第二,为什么fopen在创作时会成功,但在开场时却不会成功?

如果文件不存在,“a”选项将始终创建文件,如果成功则返回有效指针。 它是根据进程的umask设置创建的 - 在您的情况下,进程正在创建没有适当权限的文件,因此下次fopen失败时。 如果你不想弄乱umask,只需在fopen之前和之后调用它:

chmod("/home/lala/debug.log", 0644);

如果文件不存在,以这种方式调用chmod是好的,它只会做什么(除了适当地设置errno )。

fopen创建具有由进程的umask修改的权限0666文件。

因此,如果您不在程序中或程序完成后手动更改文件权限。

这个过程很可能是错误的umask。

您是在程序中还是在调用进程的上下文中设置umask 您的umask -S输出实际上看起来很好(看起来像umask 002 )。

暂无
暂无

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

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