« Profiling python with fridge | トップページ | 同期/息切れ /2 »

同期/息切れ

forkで分離した子プロセスに対してsocketpairとdup2を使って標準入力と標準出力をつなぐ.
要するに子プロセスにpipeみたいな双方向通信の経路を作ったんだけど同期がうまくいかない.
とりあえずfcntlでO_RSYNCとO_SYNCを設定してみるが意味無し.

   1176     if(socketpair(AF_UNIX,SOCK_STREAM,0,sv)<0){
   1177         perror("socket");
   1178         return -1;
   1179     }
   1180     /*setting mode*/
   1181     fcntl(sv[0],O_RSYNC|O_SYNC);
   1182     fcntl(sv[1],O_RSYNC|O_SYNC);
   1183     /*fork*/
   1184     fflag=fork();

さらにselectで読み込み可能待ちをしても二行くらい読み込んで力尽きる.
これはたぶんデータが断続的にくるせいだと思うけど,親からデータを書き込んでからselectで子が次に書き込み可能状態になるまで待っても二行くらいしか読み込まないのはなんでだろう?
試しにsleep(2)とかで待ってみるとちゃんとデータが届いた.ということはやっぱりデータ到着しきる前にreadしてるから同期がとれてないというのは間違いないぽい.
fcntlフラグで強制的に同期してるから子プロセスがwriteし切らないうちにread状態になるとは思えないんだけど,なんか勘違いがあるのかな.

« Profiling python with fridge | トップページ | 同期/息切れ /2 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/163977/3808410

この記事へのトラックバック一覧です: 同期/息切れ:

« Profiling python with fridge | トップページ | 同期/息切れ /2 »