我写了这个程序来打开一个文件。在我看到此权限(-wS-wx - T)-std=c99
open.c
ls -lh
我很好地编写了程序,没有收到任何错误或警告。
#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;
}
我从来没有见过这样的许可。什么是'S'和'T'的含义 文件权限部分? (注意:我在评论中回答了这个问题。)
答案 0 :(得分:8)
如果您在传递给O_CREAT
的标记中包含open()
,则 必须 使用该函数的三个arg形式,数字文件模式作为第三个参数。此要求记录在the Linux manual page for the function中(强调添加):
mode
参数指定在a时应用的文件模式位 新文件已创建。 必须在O_CREAT
或O_TMPFILE
时提供此参数flags
中指定了O_CREAT
;如果O_TMPFILE
和S_IRUSR | S_IWUSR | S_IRGRP
都不是 指定,然后忽略模式。
您真正想要的模式不清楚,但也许0640
适合(== {{1}};为所有者读取和写入,只读给所有者的群组,无权限对于任何其他人。)
答案 1 :(得分:0)
我发现了两个不同的open函数定义,你可以在linux终端中看到它们man 2 open
和man 3 open
。
man 2 open
POSIX程序员的Manuel man 3 open
。
如果您使用 POSIX程序员的Manuel 定义(问题中的示例代码)来打开功能,您可以获得意外的权限(例如-wS-wx-T)。
如果您使用 Linux Programmer的Manuel 定义(下面的示例代码),您可以获得定期许可。
我不确定这是真的,但我注意到了。
如果我有错,请纠正我。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int fd;
if(argc != 2){
printf("[usage] %s <file_name>\n", argv[0]);
exit(0);
}
fd = open(argv[1], O_RDWR | O_APPEND | O_CREAT, S_IRWXU | S_IRWXG | S_IROTH);
if(fd == -1){
perror("[error] open function\n");
exit(-1);
}else{
printf("[succeeded]\n");
}
return 0;
}