int fd;
fd=io->fd.open(filename,O_RDONLY|O_BINARY);
string_s=strerror(error);
結果はconfusing.fd = 3であり、string_sは「そのようなファイルまたはディレクトリはありません」です。 私は、ファイル名はfdがない理由-1ファイル記述子が間違った値を返す
int fd;
fd=io->fd.open(filename,O_RDONLY|O_BINARY);
string_s=strerror(error);
結果はconfusing.fd = 3であり、string_sは「そのようなファイルまたはディレクトリはありません」です。 私は、ファイル名はfdがない理由-1ファイル記述子が間違った値を返す
関数呼び出しが失敗しない場合は、errno
の値は未定義すべてright.Butであると確信しています。 errno
をチェックする前に、関数が失敗したかどうかをチェックする必要があります。
C言語のオープン関数を調べるにはどうすればいいですか?io-> fd.openはCの関数です。 – user7896331
@ user7896331関数が '-1'を返したかどうかをチェックします。例えば。 'if(fd == -1){printf("%s \ n "、strerror(errno)); } ' –
errno
は決してライブラリ呼び出しでをクリアしません。 C11標準のドラフトn1570は(7.5p3)以下の言葉:
初期スレッドでerrnoの値は、プログラムの起動(他のスレッドでerrnoの初期値は不定値である)、でゼロではなくなることはありません任意のライブラリ関数によってゼロに設定されます。 errnoの値は、この国際規格の関数の記述にerrnoの使用が記述されていない限り、エラーがあってもなくても、ライブラリ関数呼び出しによって0以外の値に設定されてもよい。
つまり、errno
は以前の失敗したシステムコールの値が0ではありません。 open
が成功しました。
あなたは常に明示的に0に自分自身をerrno
を設定することができます。
errno = 0;
fd = io->fd.open(filename, O_RDONLY | O_BINARY);
をし、それが成功したライブラリ・コールの後に0のままであるべきです。
ファイル名が正しい場合、なぜfdを-1にする必要がありますか? – Gerhardh