首页 > 解决方案 > 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;
        }

一般来说,我怎样才能用整数或数字来实现这样的东西?

标签: c++pipenamed-pipes

解决方案


推荐阅读