Одной из проблем при организации параллельного доступа к файлам из нескольких процессов является непредсказуемость порядка доступа. В следующем примере два процесса записывают в файл строку символов по одному символу за операцию:
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
int fd;
int x,y;
pid_t pid;
unlink("/tmp/file"); /*Удаляем предыдущий файл*/
fd=open("/tmp/file", O_WRONLY|O_CREAT, 0777);
if(fd==-1)
{
perror("open : ");
exit(0);
}
if((pid=fork()) == -1)
{
perror("fork :");
exit(0);
}
else if(pid)
{ /*Родительский процесс*/
while(1)
{
for(x=0; x<10; x++){
sleep(1);
write(fd,(char *)"x",1);
}
break;
}
else
{ /*Процесс-потомок*/
while(1)
{
for(y=0; y<10; y++){
sleep(1);
write(fd,(char *)"X",1);
}
break;
}
return 0;
}
После выполнения этой программы содержимое файла
``/tmp/file''
может выглядеть следующим образом:
/*struct flock *flockptr*/);