0

fopen/getc/fclose 関数を使用せずに、ファイルを開き、データを読み取って閉じる概念実証プログラムを開発しようとしています。代わりに、低レベルのオープン/読み取り/クローズに相当するものを使用していますが、運が悪い:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>

int main ( int argc, char **argv ) {

    int fp;

    ssize_t num_bytes;

    if ( fp = open ( "test.txt", O_RDONLY ) < 0 ) {
            perror("Error opening file");
            return 1;
    }

    char header[2];

    while ( num_bytes = read ( fp, &header, 2 ) > 0 )
            printf("read %i bytes\n", num_bytes);

    printf("done reading\n");

    close ( fp );

    return 0;
}

ファイルが存在しない場合、open は正しくエラー メッセージを出力します。一方、ファイルが存在する場合、明らかな理由もなく、プログラムは read() 関数で停止します。これについて何か助けはありますか?

4

3 に答える 3

0

「<」または「>」は「=」よりも優先されます

したがって、''0' または ''1' のいずれかになる比較結果が fp に割り当てられます。

以下のようにコードを修正し、

if ( (fp = open ( "test.txt", O_RDONLY )) < 0 )

于 2013-04-12T16:29:12.627 に答える