2013-03-26 140 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

相關問題