Я реализую канал с использованием общей памяти. Я должен написать и коснуться только библиотеки, а не main()
.Реализация трубы с использованием общей памяти
я столкнулся с проблемой:
Допустим, это main()
некоторого пользователя, который использует свою библиотеку shared_memory_pipe.h
:
#include "shared_memory_pipe.h"
int main() {
int fd[2];
shared_memory_pipe(fd);
if (fork()) {
while(1) {}
}
shared_memory_close(fd[0]);
shared_memory_close(fd[1]);
}
В этом примере мы видим, что ребенок закрывает оба его Fd-х годов, но отец застрял в бесконечном цикле и никогда не закрывает свои fd's. В этом случае моя трубка все еще должна существовать (по сравнению с случаем, когда все записи fd закрыты, или все чтение fd закрыты, или все закрыты, поэтому труба должна умереть).
Как я уже говорил, я пишу только библиотеку, (shared_memory_pipe.h
). Итак, внутри библиотеки, как я могу узнать, был ли сделан fork()
?
Как я могу узнать, что есть другой процесс, у которого есть конец чтения/записи для моей общей памяти, поэтому я знаю, чтобы закрыть/не закрыть мою общую память?
Я слышал что-то о команде, которая знает, что есть fork()
или что-то в этом роде, но я ее не нашел, и я не знаю.
Спасибо заранее! Пожалуйста, спросите, нужна ли вам дополнительная информация.
Я не понял, Я не пишу 'main()', я не могу этого сделать. и если я сделаю это в библиотеке, то есть случаи, когда ребенок никогда не сможет использовать какую-либо функцию библиотеки, поэтому я никогда не мог знать, что его pid – hudac