#file #c #bind #exec #fork
Вопрос:
У меня есть один родительский процесс, и я создаю с помощью вилки 2 таких дочерних процесса.
for (int i = 0; i < 2; i ) // loop will run n times (n=2)
{
pid = fork();
if (pid == 0)
{
printf("[son] pid %d from [parent] pid %dn", getpid(), getppid());
execl("merge", "merge", fifo1[i], fifo2[i], "2", NULL);
exit(0);
}
}
FIFO называются трубами. Я вызываю execl
и в исполняемом файле слияния открываю именованные каналы вот так.
if ((readfd = open(argv[1], O_RDONLY) < 0) {
perror("server: can't open read fifo");
}
server(readfd);
Я также пишу что-то от родителя детям вот так (я открывал fds ранее, я не писал это здесь).:
for (int = 0; i < 2; i ) {
n = strlen(word);
if (write(fd_write[i], word, n) != n) {
perror("client: filename write error");
}
}
Я хочу написать что-то на одном дочернем элементе и что-то ЕЩЕ на другом, но оба этих дочерних элемента имеют один и тот же файловый дескриптор(чтение) 4, и это похоже на то, что я пишу в одном и том же именованном канале. Что я делаю не так?