我是新来的,我是C编程的初学者。我使用管道将一个文件复制到另一个文件时遇到问题。我的缓冲区大小是10.当我从我的文件in.txt复制到out.txt时,char表的末尾总是留下一个“p”。这只是因为我的上一个输入只包含9个字符,而第十个字符来自之前的输入。 “读者:msg88 = nulla p 读者:msg89 = ariatur? p “
我应该怎么做才能清理我的char表?我不想要msg89上的最后一个“p”。我需要它是相同的文件,但in.txt末尾不包含“p”而out.txt包含。当我使用md5sum时,情况就不一样了:
197ee73779d545f0d3dc7981131736c0 in.txt
ed36f720a1ffc7e82983545d6305edc3 out.txt
代码:
filefd = open(argv[1], O_RDONLY, 0);
for(int i = 0; read(filefd, message, 10) > 0; i++)
{
printf("writer: msg%d=%s\n", i+1, message);
fflush(stdout);
write(fd[1], message, 10);
usleep(100000);
}
filefd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0666);
for(int i = 0; read(fd[0], message, 10) > 0; i++)
{
printf("reader: msg%d=%s\n", i+1, message);
fflush(stdout);
write(filefd, message, 10);
usleep(120000);
}
答案 0 :(得分:0)
read
返回读取的字节数,因此您应该能够执行以下操作:
ssize_t bytesread;
for (int i = 0; (bytesread = read(fd[0], message, 10)) > 0; i++)
{
...
write(filefd, message, bytesread);
...
}
我的想法是检查调用read
读取的字节数(我将其存储在名为bytesread
的变量中)并将该数字传递给write
调用而不是总是通过10。
我假设您会在发布的两段代码中进行类似的更改。