84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
命名管道FIFO中提供了写操作的原子化,但存在多个写者(生产者)同时往一个管道中写的时候只要每一次写操作的数据长度小于PIPE_BUF就能保证这些数据要么全部写入要么阻塞等待(或出错返回),这样就保证了两次写的数据不会交错。想请教一下匿名管道并没有提供这样的功能,那么当有多个写者同时往一个管道中写的时候是否会出现数据交错的问题?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
named pipe および anonymouse pipe の原子性の保護は、read および write によって保護されます。
named pipe
anonymouse pipe
read
write
{PIPE_BUF} バイト以下の書き込みリクエストは、同じパイプ上で書き込みを行う他のプロセスからのデータとインターリーブされません。 {PIPE_BUF} バイトを超える書き込みでは、ファイル ステータス フラグの O_NONBLOCK フラグが設定されているかどうかに関係なく、任意の境界で他のプロセスによる書き込みとデータがインターリーブされる可能性があります。 read(): 正常に完了するとnbyte が 0 より大きい場合、read() はファイルの最後のデータ アクセス タイムスタンプを更新用にマークし、読み取られたバイト数を返します。この数値は nbyte を超えることはできません。ファイルに残っているバイト数が nbyte 未満の場合、read() リクエストがシグナルによって中断された場合、またはファイルがパイプ、FIFO、または特殊ファイルであり、バイト数が nbyte 未満である場合、返される値は nbyte 未満になることがあります。 nbyte バイトをすぐに読み取ることができます。たとえば、端末に関連付けられたファイルからの read() は、入力された 1 行のデータを返す場合があります。
write():named pipe
およびanonymouse pipe
の原子性の保護は、read
およびwrite
によって保護されます。{PIPE_BUF} バイト以下の書き込みリクエストは、同じパイプ上で書き込みを行う他のプロセスからのデータとインターリーブされません。 {PIPE_BUF} バイトを超える書き込みでは、ファイル ステータス フラグの O_NONBLOCK フラグが設定されているかどうかに関係なく、任意の境界で他のプロセスによる書き込みとデータがインターリーブされる可能性があります。
したがって、長さが限定されるものはすべて原子です。read():
正常に完了するとnbyte が 0 より大きい場合、read() はファイルの最後のデータ アクセス タイムスタンプを更新用にマークし、読み取られたバイト数を返します。この数値は nbyte を超えることはできません。ファイルに残っているバイト数が nbyte 未満の場合、read() リクエストがシグナルによって中断された場合、またはファイルがパイプ、FIFO、または特殊ファイルであり、バイト数が nbyte 未満である場合、返される値は nbyte 未満になることがあります。 nbyte バイトをすぐに読み取ることができます。たとえば、端末に関連付けられたファイルからの read() は、入力された 1 行のデータを返す場合があります。