1
古典的なスキームfork()/ pipe()、 を使って処理された親子の間のブロック転送を整理しようとしましたが、なぜ子の最初のread()それ以降のすべての読み込みは行われず、読み込み後は0以外の結果が返されます。例えばMac OSブロックの読み取り(POSIX)
:答えを待つよりも、
親、子への最初の書き込みファイル名、:
for (NSString* file in filenames) {
fprintf(pict_log, "send to conversion file %s\n", filename);
write(g_pfds[1], filename, 512);
memset(filename, ' ', 512);
read(g_pfds[0], filename, 512);
fprintf(pict_log, "completed for file: %s\n", filename);
}
子、同じですが、その逆。
while(!g_break_child)
{
memset(filename, ' ', 512);
int read_bytes = read(g_pfds[0], filename, 512);
// some processing...
write(g_pfds[1], filename, 512);
}
各反復後に子供のread()でブロックする必要がありますが、なぜこれは起こりませんか?