У меня есть функция, которая печатает что-то char по char в цикле. То, что я пытаюсь сделать, это синхронизировать родительский и дочерний процессы, чтобы каждый печатал строку без вмешательства другого. Я пытаюсь сделать это с помощью семафоров.parent-child sync с системными v семафорами
это мой код:
int main() {
int i, sem;
struct sembuf u = {0, 1, 0};
struct sembuf d = {0 -1, 0};
sem = semget(IPC_PRIVATE, 1, 0600);
semctl(sem, 0, SETVAL, 1);
if (!fork()) {
for (i=0;i<10;i++){
semop(sem, &d, 1)) < 0)
print_char_by_char("hello\n");
semop(sem, &u, 1);
}
} else {
for (i=0;i<10;i++){
semop(sem, &d, 1);
print_char_by_char("world\n");
semop(sem, &u, 1);
}
semctl(sem, 0, IPC_RMID);
}
return 0;
}
Так что это не работает, отпечатки искажены, и я действительно не знаю, почему. Кроме того, если я положил чек на semop
так:
if((x = semop(sem, &down, 1)) < 0)
perror("semop");
я получаю semop: File too large