【问题标题】:how to open or create .out file with permissions in C如何在 C 中打开或创建具有权限的 .out 文件
【发布时间】:2014-06-15 09:58:36
【问题描述】:

我有问题我想打开一个扩展名为 .out 的文件,或者如果它不存在,那么它应该创建具有读写权限的文件,并且通过打开文件我想删除他的内容

variable = open( "file.out", O_RDWR | O_CREAT, S_IRWXO, O_TRUNC )

我使用了这个命令,但它总是失败,据我所知,我认为我有错误的标志:

O_RDWR 是打开具有读写权限的文件

O_CREAT 如果不存在则创建文件

S_IRWXO 被 O_CREAT 用来使文件可读可写

O_TRUNC 清除文件中的所有数据

【问题讨论】:

  • 当调用open()失败时,可以查看errno的值来判断错误原因。
  • 你检查errno了吗?
  • 写权限不能一直使用open函数给别人是不是你的问题?
  • 不,我没有,但我会
  • 哦,我没有提到我的程序卡在这个命令上,我需要编辑我的帖子,以便更准确

标签: c file-io


【解决方案1】:

open 不接受 4 个参数 - 只有 2 个或 3 个。所有 O_ 标志应该在第二个参数中进行 OR'ed 运算。此外,S_IRWXO将权限授予其他人,而不是所有者或组所有者。你的意思可能是S_IRWXU | S_IRWXG | S_IRWXO。但我宁愿只看一个八进制数;宏不更具可读性。

variable = open( "file.out", O_RDWR | O_CREAT | O_TRUNC, 0777 )

【讨论】:

  • 你的命令有点帮助,现在我的程序没有卡在这一行,但它返回负值,所以它还是失败了
  • 我不太了解 perror 我应该用什么作为参数?
【解决方案2】:

如果您想要当前用户/所有者的读/写/执行权限,请使用:S_IRWXU:

S_IRWXO

Read, write, and search or execute permission for users other than the 
file owner. S_IRWXO is the bitwise inclusive-OR of S_IROTH, S_IWOTH, 
and S_IXOTH.

S_IRWXU

Read, write, and search, or execute, for the file owner; S_IRWXG is the
bitwise inclusive-OR of S_IRUSR, S_IWUSR, and S_IXUSR.

执行open( "file.out", O_RDWR | O_CREAT, S_IRWXU, O_TRUNC );ls -l 给出:

-rwx------. 1 perreal perreal 0 Apr 29 15:52 file.out

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2012-10-11
    • 2011-09-10
    • 2010-09-23
    • 2012-03-01
    • 1970-01-01
    相关资源
    最近更新 更多