web-dev-qa-db-ja.com

不正なファイル記述子

ファイル記述子について学んでいるので、次のコードを書きました。

#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

これは非常に単純な例であるため、何が間違っているのかわかりません。

18
Lucy

これを試して:

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

O_CREATだけでは不十分だと思います。 openコマンドにフラグとしてO_WRONLYを追加してみてください。

8
RedX

Open(2)のmanページによると:

引数フラグには、O_RDONLY、O_WRONLY、またはO_RDWRのいずれかのアクセスモードを含める必要があります。

そのため、他の人が提案したとおり、openopen("output", O_CREAT|O_WRONLY, 0777));に変更してください。使用する O_RDWRファイルから読み取る必要がある場合。 O_TRUNC-詳細については、manページを参照してください。

8
spacehunt