c++ - C++ 命名管道,安全地编写 unsigned int
问题描述
我正在尝试使用管道在 C++ 中的进程之间传递数字。我必须使用的写入大小受到限制,我使用 unsigned int 来获得 4 个字节的最大大小。
我想实现读取和写入的错误检查,例如,如果我的侦听器进程没有读取所有四 (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;
}
一般来说,我怎样才能用整数或数字来实现这样的东西?
解决方案
推荐阅读
- apache-spark - 如何在没有 SQL 查询的情况下找到 Spark Dataframe 中列的平均值,并将其用作过滤器
- c# - 当数据太大时,发布请求不起作用.net core web api
- typescript - 我可以防止 tslint 警告关于 @HostListener 注释的未使用函数吗
- reactjs - Babel 7.5 针对 babel-preset-es2015 而不是 @babel/preset-env
- java - 在序列化期间修改模型
- android - 图片上传后如何获取图片下载地址
- javascript - 无法从子组件更新状态
- python-3.x - 在定义的外部和内部初始化全局变量
- php - 替换尚未替换的字符串
- python - 使用 Python C API,如何找到 Union_Type?