4

stdin をファイルに書き込もうとしていますが、何らかの理由で 0 バイトを読み続けました。

ここに私の情報源があります:

#include <stdio.h>
#include <stdlib.h>

#define BUF_SIZE 1024

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

    if (feof(stdin))
        printf("stdin reached eof\n");

    void *content = malloc(BUF_SIZE);

    FILE *fp = fopen("/tmp/mimail", "w");

    if (fp == 0)
        printf("...something went wrong opening file...\n");

    printf("About to write\n");
    int read;
    while ((read = fread(content, BUF_SIZE, 1, stdin))) {
        printf("Read %d bytes", read);
        fwrite(content, read, 1, fp);
        printf("Writing %d\n", read);
    }
    if (ferror(stdin))
        printf("There was an error reading from stdin");

    printf("Done writing\n");

    fclose(fp);

    return 0;
}

私は実行cat test.c | ./testしていますが、出力はただです

About to write
Done writing

たくさんのものをパイプしているにもかかわらず、ゼロバイトが読み取られているようです。

4

1 に答える 1

5

fread()逆にする2つの整数引数があります。バッファを1回満たすか、失敗するように指示しています。代わりに、最大1024回の単一文字を読み取るように指示する必要があります。2つの整数引数を逆にすると、設計どおりに機能します。

于 2012-05-26T19:45:52.477 に答える