如何使此fork和exec函数起作用?

时间:2019-10-31 18:30:02

标签: c fork exec

这是我的教授给我的描述:

  

编写一个C(不是C ++)程序,该程序派生一个子进程,并使用exec函数之一在命令行中列出指定为参数的目录的内容。

     

子进程应首先显示当前工作目录,然后尝试更改为指定目录。然后,它应该(使用exec函数之一)执行命令ls(带有参数--all-l(小写L)和--human-readable) 。如果无法访问指定的目录(例如,用户没有权限或目录不存在),则应显示适当的响应(请参见下文)。

     

在发生任何错误的情况下,子进程应以返回值1退出。如果目录列表成功,则子进程应以返回值0退出。如果用户未在命令行上指定目录,则应显示适当的用法消息。

     

一些注意事项:

     
      
  1. 父进程必须正确显示子进程的退出状态
  2.   
  3. 子进程必须显示当前工作目录,尝试更改为指定目录,使用指定参数执行ls,并以exit(0)exit(1)终止。
  4. li>   

这是他给我的一个例子(在Linux终端中有输入):

 ibrahim@ibrahim-latech:~$ ./prog2 /
 Current working directory: /home/ibrahim
 Executing ls / --all -l --human-readable
 total 132K
 drwxr-xr-x 22 root root 4.0K May 25 09:49 .
 drwxr-xr-x 22 root root 4.0K May 25 09:49 ..
 drwxr-xr-x 2 root root 4.0K Feb 25 2016 bin/
 drwxr-xr-x 4 root root 4.0K Feb 25 2016 boot/
 ...snip...
 Exit status: 0

这是目录不存在的示例:

 ibrahim@ibrahim-latech:~$ ./prog2 /root
 Current working directory: /home/ibrahim
 Executing ls /root --all -l --human-readable
 Can't chdir to /root
 Exit status: 1 

我有大部分程序可以工作。我需要做的最后一件事涉及父函数以及如何在最后显示退出状态。

这是我的代码:

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

int main(int argc, char *argv[]){
    pid_t pid;
    pid = fork();
    int ret;
    char cwd[255];
    if(pid == 0){
        printf("Current working directory: %s\n",getcwd(cwd, sizeof(cwd)));
        printf("Executing ls %s --all -l --human-readable\n",argv[1]);
       if(chdir(argv[1])!=0){
           printf("this is not a valid directory");
           exit(1);
       }
       else{
            execl("/bin/ls","ls","--all","-l","--human-readable", NULL);
            exit(0);
       }
    }
   else{
       printf("Exit status:");// not sure how to put the 1 or 0 in this
}
}

由于某种原因,它不打印父进程中的内容

0 个答案:

没有答案