我正在编写一个简单的程序来读取一个文件(填充随机字母重复随机数字)1024字节×1024字节并将其发送到FIFO管道。
首先,如果我的文件大小为2007B,则第一次读取(fdFile,buffer_f,1024)正确读取,例如1020B,最后一次读取将是随机字符,如?qR?。
然后,在第二次读取时,返回的值应该是983,但缓冲区包含的绝对相同的字符串比之前大小为1024.
有人知道为什么PLZ?
当我从我的FIFO读取时,同样的事情发生,但最后有一个不同的随机子串。
while((buffer_f_size = read(fdFile, buffer_f, 1024)) > 0){
printf("Partida leida en el archivo arg : \n%s\nTamano de la partida : %d\n", buffer_f, buffer_f_size);
fflush(stdout);
if(write(fdprox, buffer_f, buffer_f_size) != buffer_f_size){
perror("Error en la lectura/escritura del archivo en el FIFO_proxy");
exit(-1);
}
}
答案 0 :(得分:2)
传递给printf
的缓冲区不一定有空终止符。
您应该传递从缓冲区打印的最大字节数:
while ((buffer_f_size = read(fdFile, buffer_f, 1024)) > 0) {
printf("Partida leida en el archivo arg :\n"
"%.*s\n"
"Tamano de la partida : %d\n",
(int)buffer_f_size, buffer_f, (int)buffer_f_size);
fflush(stdout);
if (write(fdprox, buffer_f, buffer_f_size) != buffer_f_size) {
perror("Error en la lectura/escritura del archivo en el FIFO_proxy");
exit(-1);
}
}
请注意,如果收到的缓冲区包含空字节,则printf()
将忽略第一个空字节后面的任何内容。