0

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=4およびread_count=3である必要がありますが、buf_lenの異なる値を9、5などとして取得します。

私はどこで間違っているのですか?

4

1 に答える 1

1

成功しbuf_lenたかどうかに関係なく設定し、設定します。読み取ることができるデータがない場合は、ジャンクが含まれます。readcount

于 2013-03-26T03:47:56.623 に答える