C ++命名管道,安全地写入unsigned int

时间:2019-04-08 10:13:49

标签: c++ pipe named-pipes

我正在尝试使用管道在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;
        }

通常如何使用整数或数字来实现类似的功能?

0 个答案:

没有答案