首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行Exec()命令参数

运行Exec()命令参数
EN

Stack Overflow用户
提问于 2019-10-19 22:24:43
回答 1查看 60关注 0票数 0

我是学生开发人员,也是C语言的初学者。我有一个任务,我没有找到一个明确的解决办法,根据我的水平。我想在子进程中运行exec()函数。我使用fork()创建了父级和子级。没问题的。但是我的代码只是运行命令,比如ls , pwd等等。如果我想编写ls -l,它不会像那样运行命令。我该怎么办?在这个问题上你能帮我吗?

我的ls输出:

最小二乘法 a.out main.c 2006152毫秒

我对ls -l的输出

ls -l Error exec:没有这样的文件或目录 3627824毫秒

我的代码是:

代码语言:javascript
复制
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

#define N 100

void ChildProcess  ();  
void ParentProcess ();  

struct timeval start, end;

int main () {


    gettimeofday (&start, NULL);

    pid_t pid;
    pid = fork ();

    if (pid == 0){
        ChildProcess ();
    }
    else {
        wait (NULL);
        ParentProcess ();
    }

return 0;
}

void ChildProcess () {
    char input[N];
    scanf (" %[^\n]s", input);

    if (execlp (input, "", (char *) 0) < 0){
    perror ("Error exec");
    exit (0);}
} 

void ParentProcess () {
    gettimeofday (&end, NULL);
    printf ("%ld %s \n", ((end.tv_sec * 1000000 + end.tv_usec)-(start.tv_sec * 1000000 + start.tv_usec)), "ms");
} 
EN

回答 1

Stack Overflow用户

发布于 2019-10-19 23:07:55

您的问题是,所有exec()家族函数只期望可执行名称作为第一个参数(没有任何参数)。然后根据您决定调用的exec函数传递参数。在execlp()的情况下,所有参数(包括可执行名称)都作为以空结尾的列表传递。

实际上,您希望以这样的方式调用您的函数:

代码语言:javascript
复制
execlp ("ls", "ls", "-l", (char *) 0);

这样做的方法是将空间字符上的input字符串拆分(使用strtok()),并将结果保存在不同的变量中。

如果您想处理多个参数的情况,那么就不能通过使用execlp()来实现它。使用execvp()代替相应的修改。您可以找到所有exec()函数的手册页( 这里 ),这将为您提供足够的信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58468505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档