ioctl()每次都给出不同的大小

时间:2013-03-26 03:39:57

标签: c ipc pipe

我正在使用ioctl()函数调用来获取管道端可用的数据大小,并根据它分配内存。

为此,我将此代码段编写为

    if((read(mg_in, &byte, 1)) == 1)
            {
                    ioctl(mg_in, FIONREAD, &count);
                    buf = malloc(count+1);                                                          
                    buf[0] = byte;
                    read_count = read(mg_in, buf+1, count);

            }       
  buf_len = read_count+1;

从另一个进程,我总是写4个字节,但在上面的代码中我得到不同的buf_len值为9,5等,虽然它应该是buf_len = 4和read_count = 3.

我做错了什么?

1 个答案:

答案 0 :(得分:1)

无论您的buf_len成功与否设置read,您都会设置count。如果没有可供阅读的数据,它就会有垃圾。