我正在使用带有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作为管道源时看到了相同的行为
答案 0 :(得分:1)
您需要使用二进制模式fopen
。我不确定您是否可以在freopen
上使用stdin
,但请尝试一下:
freopen(NULL, "rb", stdin);
答案 1 :(得分:0)
您必须以二进制模式打开文件,并将写入。组合0d0a是一个回车后跟新行,当你在文本模式下写入时,系统将会改变。