程序在 c 中的库 fcntl.h 中找不到常量

programm can not find constant in libary fcntl.h in c

我正在学习 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-version 构建的,因为 S_IRUSRS_IWUSR 仅在 fcntl.h 内部提供 POSIX.1-2008 正如 Ian Abbott 在评论中所说。

如果您的编译器使用前面的 POSIX-version,宏 S_IRUSRS_IWUSR 未在 fcntl.h 中定义,如您所见 here。然后在 header sys/stat.h.

中定义它们

这里是 link 对 header sys/stat.h 内容的描述,在那里你可以找到那些:

https://pubs.opengroup.org/onlinepubs/007908799/xsh/sysstat.h.html


因此,如果您的编译器使用早于 POSIX.1-2008 的版本,请在代码顶部添加 #include <sys/stat.h>,否则如果您不需要 fcntl.h 中的任何内容换成那个。