2013-03-26 85 views
0

我使用ioctl()函数调用来获取管道端可用数据的大小并根据该数据分配内存。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

'ioctl'调用是否成功?确保它返回0. – 2013-03-26 03:55:09

回答

1

您正在设置buf_len,不管您的read是否成功,并且您设置了count。如果没有可读取的数据,它会有垃圾。

+0

感谢您的回复。我已经在上面的代码中测试了read_count的值,这意味着读取成功。但它读取8个字节,而我从另一端只写入4个字节。但是当我第一次运行程序时,它读取4,但是当我下次运行该程序时会给出其他值 – 2013-03-26 05:48:10