2011-01-31 11 views
0

次のように私は基本的なコードを持って、ファイル読み込みエラー:成功

fd = open("test.file", O_RDONLY); 
    if (read(fd, &tempch, 1) < 1) { 
     perror("File Read Error"); 
     exit(1); 
    } 
    printf("We could read from the file\n"); 

test.fileは、ファイルシステムに存在し、777人の権限で許可されています。プログラムはエラー "ファイルの読み込みエラー:成功"をスローします...誰でも可能な理由を教えてもらえますか?あなたが開いているの戻り値をチェックすると、テスト中に存在しているにも何バイトかもしれません感謝

+0

あなたの質問には一般的に「unix」とタグ付けされています。実際にLinuxを使用している場合は、再度タグを付けてください。 –

答えて

6

read()がゼロカウントを返すことは完全に正常である、それは単にそれがファイルの終わりに遭遇したことを意味します。ゼロより小さい値を返すと、エラーになります。

-1が返された場合、何が問題になったかを示すerrnoを設定する必要があります。

ファイルには何かが含まれていますか?あなたはUNIXのようなアクセス許可に言及して以来、POSIX specification for read()はあなたにとって有益でしょう。

+0

'read()'はエラーなしで-1を返す可能性があります。シグナルがread()呼び出しを中断する可能性があります。 – 12431234123412341234123

1

は、私は確かではないんだけど、この

if (read(fd, &tempch, 1) < 1) 

はほぼ確実

if (read(fd, &tempch, 1) < 0) 
2

する必要があります。ファイル!ファイルが0バイトの場合、1未満の戻り値は期待通りです。読みマニュアルページから

On success, the number of bytes read is returned (zero indicates end of file), and the file position is advanced by this number. It is not an error if this number is smaller than the number of bytes requested; this may happen for example because fewer bytes are actually available right now (maybe because we were close to end-of-file, or because we are reading from a pipe, or from a terminal), or because read() was interrupted by a signal.

+0

@Timはい、これは私が伝えたいものです - 読み込みからの戻り値は、ファイルのサイズに依存する正常に読み込まれたバイト数です。文言を明確にしました。 – Neera

+0

ああ、今すぐクリアしてください。私はあなたの答えを最初に誤解しました。コメントは削除されました。 –

関連する問題