gpt4 book ai didi

c - 在 C 中使用 open() 函数对文件权限产生意外结果(-wS-wx--T)

转载 作者:IT王子 更新时间:2023-10-29 01:00:12 26 4
gpt4 key购买 nike

我写这个程序是为了打开一个文件。一切正常,直到我使用 ls -lh

看到此权限 (-wS-wx--T)

open.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>

#define FILE "foo.txt"

int main()
{
int fd;
int errnum;

fd = open(FILE, O_RDWR | O_CREAT);

if(fd == -1)
{
printf("[error] The file hasn't opened.\n");
perror("Error printed by perror");
}else {
printf("The process was succeeded\n");
}

return 0;
}

我很顺利地编译了程序,没有出现任何错误和警告。

$ ./open
The process was succeeded
$ ls -lh
-rwxrwxr-x 1 hemre hemre 8.5K Feb 1 23:38 open
--wS-wx--T 1 hemre hemre 0 Feb 1 23:39 foo.txt

我从未见过那种许可。 'S' 和 'T' 是什么意思文件权限部分?(注意:我在评论中回答了这个问题。)

最佳答案

如果您在传递给 open() 的标志中包含 O_CREAT,那么您必须使用三个- arg 形式的函数,它将数字文件模式作为第三个参数。此要求记录在 the Linux manual page for the function 中(强调):

The mode argument specifies the file mode bits be applied when a new file is created. This argument must be supplied when O_CREAT or O_TMPFILE is specified in flags; if neither O_CREAT nor O_TMPFILE is specified, then mode is ignored.

您实际想要的模式尚不清楚,但也许 S_IRUSR | S_IWUSR | S_IRGRP 比较合适(== 0640; 所有者读写,所有者组只读,其他人无权限)。

关于c - 在 C 中使用 open() 函数对文件权限产生意外结果(-wS-wx--T),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com