1

我正在使用带有 getc() 的 while 循环从文件句柄中读取,它工作正常。现在我正在添加对管道的支持。

我的问题是,虽然 x0A、X0D 和 x0A0D 通过就好了,但 x0D0A 的任何情况都会减少到 x0A。此外,x1A 似乎在遇到时会完全停止该过程。

我正在输入 tar 的输出,并且正在弄乱文件。

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

这很简单,因为 FH 需要指向文件或标准输入。对于测试,我只是将 buff 写入文件以查看更改。如果 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 回答