如何使stdin上的getc()成为二进制

时间:2013-09-08 23:20:40

标签: c stdin pipe getc

我正在使用带有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作为管道源时看到了相同的行为

2 个答案:

答案 0 :(得分:1)

您需要使用二进制模式fopen。我不确定您是否可以在freopen上使用stdin,但请尝试一下:

freopen(NULL, "rb", stdin);

答案 1 :(得分:0)

您必须以二进制模式打开文件,并将写入。组合0d0a是一个回车后跟新行,当你在文本模式下写入时,系统将会改变。