C ++ называет каналы, пишите без знака int безопасно - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь передать числа между процессами в C ++, используя каналы. Я ограничен в размере записи, который я должен использовать, чтобы использовать unsigned int, чтобы получить максимальный размер для 4 байтов.

Я хочу реализовать проверку ошибок как на чтение, так и на запись, например, если мой процесс слушателя не прочитал все четыре (4) байта или писатель не записал все 4 байта за раз, чтобы читать снова, пока я не напишу / прочитаю точно 4, перемещая указатель в уже записанных / прочитанных файлах, пока я не укажу нужный размер.

Это мой код для массивов символов (строк), которые считывают куски 'buffer_size' строки 'content_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;
        }

Как я могу реализовать что-то подобное с целыми числами или числами в целом?

...