程序无法执行语句

时间:2012-08-31 04:08:40

标签: c unix system-calls

我非常了解C编程,但我对Unix系统调用没有多少经验。经过很长一段时间,我正在重新探索我的Unix知识。所以我开始使用fork和execlp系统调用。我正在练习ubuntu_linux的例子。

这是一个教科书示例程序,它接受来自STD_IN的命令并在子进程中执行它。

int main (int argc, char *argv[]) {
   char command[MAX_LINE];
   pid_t pid;
   int   status;

   printf ("%% ");
   while (fgets (command,MAX_LINE,stdin ) != NULL){
        if (command[strlen(command)-1] == '\n')
          command[strlen(command)-1] = '\0';

        if ((pid=fork ()) < 0) {
           perror ("fork failed :  \n");
        }

        if (pid == 0) {
           printf (" I am child and my PID is %d",getpid ());
           execlp (command, command, (char *)0);
           perror ("couldn't execute:"); 
           exit(127);
        }

        printf (" I am parent and my PID is %d\n ",getpid ());
        if ((pid = waitpid (pid, &status, 0)) < 0){
            perror("waitpid error\n");
        }

        printf ("%% ");
    }
    exit (0);
}

我提供了一些printf声明,但程序没有打印&#34;我是孩子,只要命令成功执行,我的PID就是&#34; 。但是,如果输入命令不正确并且失败,则打印上面的行。

由于print语句在execlp之前,我希望在两种情况下都能打印这行。

1 个答案:

答案 0 :(得分:0)

这应该在exec之前刷新标准输出。

printf (" I am child and my PID is %d",getpid ());
fflush(stdout);
execlp (command, command, (char *)0);