0

重複の可能性:
Unix システムのファイル read() 関数

read() 関数が 10 バイトのデータを読み取り、バッファに格納されたとします。ここで、UNIX の read() 関数がシグナルによって中断され、以下に示すように読み取り関数を再開した場合、次のバイトはどこに格納されますか? currentposition+1 またはバッファの先頭から書き込まれます。

int r_read(int fd, void *buf, int size)
{
   while((retval=read(fd,buf,size))==-1 && errno ==EINTR);
  return retval;
}  

よろしく

4

1 に答える 1

0

コード化したように、取得後、データを格納するためのメモリの開始アドレスとして、再度EINTR呼び出します。これは適切に見えます。readbuf

ただし、read部分的なデータを読み取ったときに正の数で戻る場合があります。その場合while()は、ブレークです。

于 2012-11-04T14:53:04.880 に答える