read () возвращает неверный файловый дескриптор допустимого файлового дескриптора - PullRequest
0 голосов
/ 17 января 2019

В следующей программе

int main()
{
    int fd;
    char buf[8]={};

    remove("file.txt");
    fd = creat("file.txt",0666);
    write(fd,"asdf",5);
    perror("write");
    lseek(fd,0,SEEK_SET);
    perror("lseek");
    read(fd,buf,5);
    perror("read");
    printf("%s\n",buf);
    return 0;
}

Мой ожидаемый результат -

write : Success
lseek : Success
Read : Success
asdf

Но это показывает

wriet : Success
lseek : Success
Read : Bad file descriptor

Кто-нибудь может сказать мне причину? Я вижу, что строка "asdf", если она успешно записана в file.txt

1 Ответ

0 голосов
/ 17 января 2019

С справочной страницы:

Функция creat () должна вести себя так, как будто она реализована следующим образом:

int creat(const char *path, mode_t mode)
{
    return open(path, O_WRONLY|O_CREAT|O_TRUNC, mode);
}

Итак, файл открывается в режиме только для записи, и поэтому вы не можете прочитать.

Если вам нужно читать и писать, используйте open(...) напрямую с O_RDWR вместо O_WRONLY.

Указанный вами 0666 просто указывает разрешения в файловой системе, с которой создается файл.

Если вы хотите просто выполнить обычный файловый ввод / вывод, вы также можете использовать высокоуровневые API, такие как fopen.

...