#c #linux #operating-system #system-calls
#c #linux #операционная система #системные вызовы
Вопрос:
У меня есть следующий черновик кода.
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf( "usage: %i filename", argc );
pid_t pID = fork();
if (pID == 0) // child
{
// Code only executed by child process
printf("Child PID: %i", pID);
int file = open("/tmp/rtail", O_CREAT | O_WRONLY);
//Now we redirect standard output to the file using dup2
dup2(file,1);
char tmp[30];
sprintf(tmp, "cat `tail -f %s`", argv[1]);
}
else if (pID < 0) // failed to fork
{
printf("Failed to fork");
exit(1);
// Throw exception
}
else // parent
{
}
// Code executed by both parent and child.
return 0;
}
Как мне передать аргументы командной строки дочернему процессу? Например, при запуске ./app alch.txt
я хочу
sprintf(tmp, "cat `tail -f %s`", argv[1]);
для получения
cat `tail -f alch.txt`
в tmp.
Комментарии:
1. Точно так же, как вы это делаете? Ваш код в порядке. В чем именно заключается проблема, с которой вы столкнулись?
Ответ №1:
Как мне передать аргументы командной строки дочернему процессу?
Вам не нужно делать ничего особенного; fork
гарантирует, что каждый процесс получает все локальные переменные, в том числе argv
.
Ответ №2:
Извините за беспокойство, это действительно работает нормально. Моя более ранняя версия по какой-то причине не работала, но, видимо, я что-то изменил, чтобы сделать это правильно. В следующий раз я выполню свой код перед вопросом.