Мне интересно, как я могу передать дескриптор файла с помощью команды execve()
и затем получить к нему доступ с другой стороны.Я знаю, что могу использовать dup2
для перенаправления файлового дескриптора, но я не могу этого сделать.Я должен передать дескриптор файла потомку и использовать его в потомке.
Что я сделал до сих пор:
Родитель делает pipe
+ аргументы, подобные следующим:
int pfd[2];
if(pipe(pfd) == -1)
exitWithError("PIPE FAILED", 1);
char *args_1[] = {"reader", argv[1], (char*) pfd, (char *) 0};
Затем дочерний элемент вызывает execve
после fork()
, как показано ниже:
close(pfd[1]);
execve("./reader", args_1, NULL);
Затем в программе чтения я пытаюсь получить доступ к дескриптору канала, который был передан:
int main(int argc, char* argv[]){
...
write(argv[2][1], buf, read_test);
argv[2]
должен ссылаться на дескриптор канала, тогда argv[1]
должен идти к концу записи канала.Я почти уверен, что мне нужно выполнить некоторое приведение типов по-другому, но все, что я пытаюсь, не совсем получается.
ПРИМЕЧАНИЕ : у меня есть рабочая версия этой программы, использующаяdup2
для перенаправления на stdin
и stdout
для детей, но я должен фактически передать дескриптор канала ребенку в соответствии с инструкциями проекта.
Любая помощь приветствуется.