如何在fork()之后将命令行参数传递给子进程

时间:2011-10-23 16:14:55

标签: c linux operating-system system-calls

我有以下代码草稿。

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

in tmp。

2 个答案:

答案 0 :(得分:8)

  

如何将命令行参数传递给子进程?

你不需要做任何特别的事情; fork确保每个进程获取所有本地变量,包括argv

答案 1 :(得分:1)

对不起,这确实很好。我的早期版本由于某种原因不起作用,但显然我已经改变了一些东西以使其正确。将在下一次问题之前运行我的代码。