1

ファイルハンドルから読み取るために getc() で while ループを使用していますが、正常に動作します。現在、パイプのサポートを追加しています。

私の問題は、x0A、X0D、および x0A0D は問題なく通過しますが、x0D0A のケースはすべて x0A に縮小されることです。また、x1A に遭遇するとプロセスが完全に停止するようです。

tar の出力をパイピングしていて、ファイルがめちゃくちゃになっています。

FILE *FH;
FH=stdin; 
int buff;
while((buff=getc(FH))!=EOF) {
    //stuff
}

FH はファイルまたは標準入力のいずれかを指す必要があるため、これは単純化されています。テストのために、変更を確認するためにバフをファイルに書き出すだけです。FH がファイルの場合、コードは完全に機能します。

パイプ ソースとして tar、type、および cat を使用した場合と同じ動作を見てきました。

4

2 に答える 2

1

fopenバイナリモードを使用する必要があります。freopenonを使用できるかどうかはわかりませんがstdin、試してみてください。

freopen(NULL, "rb", stdin);
于 2013-09-08T23:27:03.827 に答える
0

書き込み先のファイルをバイナリ モードで開く必要があります。0d0a の組み合わせは、キャリッジ リターンの後に改行が続き、システムによっては、テキスト モードで書き込むときに変更されます。

于 2013-09-08T23:25:25.097 に答える