Программа не может найти константу в библиотеке fcntl.h в c - PullRequest
0 голосов
/ 09 апреля 2020

Я изучаю C и почему-то моя программа не может найти константу, определенную в библиотеке. В моем понимании S_IRUSR | S_IWUSR должен быть определен в fcntl.h, но я получаю, пытаясь скомпилировать эту ошибку: ... error: 'S_IRUSR' undeclared (первое использование в этой функции) ... ... error: 'S_IWUSR' undeclared ( Первое использование в этой функции)

Моя программа выглядит так:

#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;
}

Любая помощь?

Спасибо

1 Ответ

1 голос
/ 09 апреля 2020

Это зависит от того, в соответствии с какой версией POSIX ваш компилятор и реализация собираются, потому что S_IRUSR и S_IWUSR предоставляются только внутри fcntl.h в POSIX.1-2008 как Ian Abbott сказано в комментариях.

Если ваш компилятор использует предыдущую 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 замени это на это.

...