我正在学习C,不知何故我的程序找不到库中定义的常量。在我的理解中S_IRUSR|S_IWUSR应该在 fcntl.h 中定义,但我在尝试编译此错误时得到: ...错误:"S_IRUSR"未声明(首次在此函数中使用) ...错误:"S_IWUSR"未声明(首次在此函数中使用)
我的程序看起来像这样:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]){
int filedeskriptor;
char SchreibeTxt [100] = "Hallo getMonth", LeseTxt [100];
filedeskriptor = open("getMonthTxt", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
if (filedeskriptor == -1){
printf("Fehler beim Öffnen von mydat n");
exit (EXIT_FAILURE);
}
if (write(filedeskriptor, SchreibeTxt, sizeof(SchreibeTxt)) == -1){
printf("Fehler beim Schreiben in mydat n");
exit (EXIT_FAILURE);
}
printf("In getMonthTxt geschrieben: %s n", SchreibeTxt);
close(filedeskriptor);
return EXIT_SUCCESS;
}
有什么帮助吗?
谢谢
这取决于您的编译器和实现的POSIX版本,因为正如Ian Abbott在评论中所说,S_IRUSR
和S_IWUSR
仅在POSIX.1-2008的fcntl.h
内提供。
如果编译器使用前面的 POSIX 版本,则宏S_IRUSR
和S_IWUSR
不会在fcntl.h
中定义,如下所示。然后在标头sys/stat.h
中定义它们。
这是指向有关标题sys/stat.h
内容的说明的链接,您可以在其中找到这些内容:
https://pubs.opengroup.org/onlinepubs/007908799/xsh/sysstat.h.html
因此,如果您的编译器使用早于 POSIX.1-2008 的版本,请在代码顶部添加#include <sys/stat.h>
,否则,如果您不需要任何内容,fcntl.h
请将其替换为该版本。
也许你缺少标题
man 2 打开状态 3 打开() 的标头