创建一个在C

时间:2016-03-20 21:48:08

标签: c unix operating-system system

我是C语言中的系统编程新手。

我想编写一个程序,一个接一个地执行几个命令。命令由分号分隔。

这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
    int counter = 0;
    pid_t fils;

    if (argc == 1){
        printf ("USAGE : who ; pwd ; ls -l\n");
        exit(1);
    }

    printf("Number of arguments %d \n",argc);

    for(counter=0;counter<argc;counter++){
        fils = fork();
        if (fils <0){
            perror("Error fork! ");
            exit(1);
        }

        if(fils == 0){
            printf ("Execution of command %d %s \n",counter+1,argv[counter+1]);
            sleep(2);
            execvp(argv[counter+1],argv+counter+1);
        }

        wait(NULL);
    }
    return 0;
}

例如,我的文件名是myProgram,我希望执行的命令列表是:who ; pwd ; ls -l

所以,当我输入:./myProgram who ; pwd ; ls -l 我注意到我的程序只考虑了2个参数,因此它不考虑分号。它将文件的名称作为第一个参数,其余作为第二个参数。

如何修改我的代码,以便它可以将分号后面的每个命令视为它自己的单独命令。

提前谢谢

1 个答案:

答案 0 :(得分:1)

当您键入./myProgram who ; pwd ; ls -l时,shell会将其解释为:

  1. 运行./myProgram who
  2. 运行pwd
  3. 运行ls -l
  4. 但是您希望将所有who ; pwd ; ls -l作为参数发送到单个./myProgram命令,因此您需要告诉shell不要将;解释为它自己的分隔符,就像这样{ {1}}。特殊字符./myProgram who \; pwd \; ls -l用于告诉shell不要解释下面的字符,而是按原样使用。