我正在编写一个程序,通过文件读取后通过管道发送数据。有时代码工作正常,但有时一些额外的字符被读取。但代码工作得很好,BUF_SIZE
是1.我猜我正在阅读一些额外的或垃圾数据,但我无法弄清楚在哪里。
额外字符如:
AEOI
#include <iostream>
#include <fstream>
#include <sys/wait.h>
#include <unistd.h>
using namespace std;
#define BUF_SIZE 512
int main(){
int fd[2];
char buf[BUF_SIZE];
pipe(fd);
switch(fork()){
default:{
close(fd[1]);
fstream o;
o.open("out.txt",fstream::trunc|fstream::out);
int numread;
while(1){
numread=read(fd[0],buf,BUF_SIZE);
if(numread<0) continue;
if(numread==0) break;
o<<buf;
}
o.close();
close(fd[0]);
wait(NULL);
break;
}
case 0:
close(fd[0]);
ifstream inp("in.txt");
char buf2[BUF_SIZE];
while(inp){
inp.read(buf2,BUF_SIZE);
if(inp.gcount()!=0)
write(fd[1],buf2,inp.gcount());
}
inp.close();
close(fd[1]);
}
}
答案 0 :(得分:2)
变化
char buf[BUF_SIZE];
到
char buf[BUF_SIZE+1];
并插入
buf[numread]=0;
前
o<<buf;
否则buf包含由read
接收的数据背后的垃圾数据,并且o&lt;&lt; buf将复制该垃圾数据,直到找到'\0'