Неверный дескриптор файла - PullRequest
18 голосов
/ 05 июня 2011

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

#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

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

Ответы [ 3 ]

21 голосов
/ 06 июня 2011

Попробуйте это:

open("output", O_CREAT|O_WRONLY, 0777)
8 голосов
/ 06 июня 2011

Согласно открытой (2) странице справочника:

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

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

8 голосов
/ 06 июня 2011

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

...