微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当文件存在时,fopen失败

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

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

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

这是特定文件的ls的输出

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

首先,为什么这些文件在这些权限下创build的。 其次,为什么打开时打开成功,而不打开?

有没有一个平台独立的方式设置文件权限与gradle?

CACLS混乱

gammu-smsd RunOnReceive脚本结果退出状态2

c程序:为什么remove()删除没有写权限的文件

QFileInfo :: isWritable()在Windows 7上以完全权限返回false

PowerShell文件夹权限错误 – 部分或全部标识引用无法转换。

Linux(Ubuntu 9.04)的权限 – 我如何删除rws?

Cgi-bin脚本来捕捉用户拥有的文件

使用git时,Mac / Windows文件权限问题

上传目标文件夹即使(似乎是)正确的文件权限似乎不可写

fopen创建了由进程的umask修改的权限0666文件

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

该过程很可能会有一个错误的umask。

你是否在你的程序中或在调用过程的上下文中设置了umask ? 你的umask -S输出实际上看起来很好(看起来像umask 002 )。

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

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

如果文件不存在,就可以用这种方法调用chmod ,除了设置errno外,什么也不做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐