我正在尝试使用管道在C ++中的进程之间传递数字。我在必须使用的写入大小上受限制,我使用unsigned int来获取4个字节的最大大小。
我想实现对读取和写入的错误检查,例如,如果我的侦听器进程未读取全部四(4)个字节,或者写入器未一次写入所有的四个字节,请再次读取直到我完全写入/读取4通过将指针移到已经写入/读取的位置,直到我完成所需的大小。
这是我的char数组(字符串)代码,该代码从管道读取'content_size'字符串的'buffer_size'块并将其写入文件指针'fp':
while(size_read < content_size)
{
nread
memset(chunk, '\0', buffer_size+1);
if ((content_size-size_read)<buffer_size) // for the last read, try to read only until the 'content_size' byte, instead of buffer_size
{
nread=read(fd, chunk, (content_size-size_read));
}
else // all the other times, read buffersize
{
nread=read(fd, chunk, buffer_size);
}
if(size_read+nread==content_size)
{
// fwrite(chunk,nread,1,fp);
fwrite(chunk,strlen(chunk),1,fp);
break;
}
size_read+=nread;
if ((content_size-size_read)<buffer_size) //
{
while(nread<(content_size-size_read))
{
nread+=read(fd, chunk+nread, (content_size-size_read)-nread);
// size_read+=nread; // edw
if(size_read==content_size)
{
done=true;
break;
}
}
fwrite(chunk,strlen(chunk),1,fp);
// size_read+=nread;
}
else
{
how_much_i_will_have_read_at_end= buffer_size-nread;
while(nread<buffer_size)
{
nread+=read(fd, chunk+nread, buffer_size-nread);
if(size_read==content_size)
{
done=true;
break;
}
}
// fwrite(chunk,buffer_size,1,fp);
fwrite(chunk,strlen(chunk),1,fp);
size_read+=how_much_i_will_have_read_at_end;
}
if(done) break;
}
通常如何使用整数或数字来实现类似的功能?