Проблема в следующем:
открываем какой нибудь файл:
FILE* log;
log=fopen("my-log","w");
fprintf(log,"begin of file\n");
...
Потом создаем дочерний процесс:
if(pid=fork())
{
fprintf(log,"Pid = %d\n",pid);
exit(0)
}
Потом создаем еще несколько таких же процессов.
Процесс - родитель завершаем следующим образом:
...
fprintf(log,"End of file\n");
fclose(log);
В результате получаем содершимое файла log:
begin of file
begin of file
Pid=1051
begin of file
Pid=1052
...
begin of file
Pid=n
End of file
По моему это происходит из-за того, что файл log, открытый в родительском процессе, просто закрывается каждый раз при смерти дочернего процесса и все его содержимое заново сохраняется (в т.ч. и строка begin of file).
Не подскажет ли глубокоуважаемый all каким образом этого можно избежать, или как запускать дочерний процесс не передавая ему дескрипторы НЕКОТОРЫХ открытых в родительском процессе фалов без вмешивания exec.
Заранее спасибо
Не все так просто при работе нескольких процессов с одним файлом.
Если требования на атомарность операций ввода-вывода серьезные,
следует посмотреть fcntl(2) и flock(2).