Плохой дескриптор файла

Я изучаю файловые дескрипторы, и я написал этот код:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

int fdrd, fdwr, fdwt;
char c;

main (int argc, char *argv[]) {

    if((fdwt = open("output", O_CREAT, 0777)) == -1) {
        perror("Error opening the file:");
        exit(1);
    }

    char c = 'x';

    if(write(fdwt, &c, 1) == -1) {
        perror("Error writing the file:");
    }

    close(fdwt);
    exit(0);

}

но я получаю: Error writing the file:: Bad file descriptor

Я не знаю, что может быть неправильным, так как это очень простой пример.

Ответы

Ответ 1

Попробуйте следующее:

open("output", O_CREAT|O_WRONLY, 0777)

Ответ 2

Я думаю, что только O_CREAT недостаточно. Попробуйте добавить O_WRONLY как флаг в команду open.

Ответ 3

В соответствии с открытой (2) страницей man:

Флаговые аргументы должны включать один из следующих режимов доступа: O_RDONLY, O_WRONLY или O_RDWR.

Итак, да, как было предложено другими, пожалуйста, измените open на open("output", O_CREAT|O_WRONLY, 0777));. Используйте O_RDWR, если вам нужно прочитать из файла. Вам также может понадобиться O_TRUNC - подробности см. на странице руководства.