как передать аргументы командной строки дочернему процессу после fork()

#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:

Извините за беспокойство, это действительно работает нормально. Моя более ранняя версия по какой-то причине не работала, но, видимо, я что-то изменил, чтобы сделать это правильно. В следующий раз я выполню свой код перед вопросом.