execvp

    0热度

    1回答

    我就需要能够使用execvp执行某些命令的C程序的工作,我也有实现这一点: execvp(arguments[0], arguments); 其中arguments[]是一系列刺痛。大多数情况下,我的实现工作正常 - 例如如果arguments为{"touch", "somefile.txt"},则按预期调用touch命令。 然而,当我试图传递ls与参数是像{"/bin/ls", "-a", ".

    2热度

    2回答

    我有一个守护进程正在运行,这可能会产生一个进程在传入连接。这是通过使用execvp()和fork()完成的。 问题是,进程不应以root身份运行,并且进程依赖于正确的用户环境。所以即时通讯寻求一种方式来加载用户环境。 当前通过设置gid和uid作为另一个用户执行该过程。我已经尝试过的是使用命令su -l user -c command,因为某些原因,它不起作用。 有人知道我如何加载用户环境(尤其是

    0热度

    1回答

    我遇到了execvp和fork问题。当我运行代码时,即使在创建文件时,exec也不起作用。它只是返回一个“错误的地址”错误。另外,printf(“在孩子中”)在我运行时不会出现。我的代码如何在不打印“在孩子中”的情况下进入execvp? pid = fork(); switch(pid) { case -1: fprintf(stderr,"ERROR WITH

    2热度

    1回答

    我目前正在努力解决这个错误。我正在编写一个shell模拟器,使用fork()来执行使用execvp();的命令。 几乎每个我试图解析到shell的命令都能正常工作,除了ls没有参数。 如果我尝试执行LS -lah,一切正常,但一个简单的LS不会,收到以下错误: ls: fts_open: No such file or directory 这里是我的代码片段:(只是必需的) pid = for

    4热度

    3回答

    我目前正在写我的课是应该作为一个很基本的壳转让。我差不多完成了,但是我遇到了execvp和我的字符数组参数问题。这是我的代码的一小段代码。 //Split the left content args istringstream iss(left); while(getline(iss, s, ' ')){ v.push_back(s); } //Get the split st

    1热度

    2回答

    我已经试过真的很难,但不能想出一个方法来打印一个错误,如果 find -name \"filename" 没有找到任何文件。我使用至今的代码如下: char *argv[]; argv[0]="find"; argv[1]="-name"; argv[2]=strcat(str,"\abc.txt"); argv[3]=NULL; pid

    0热度

    1回答

    我试图执行文件使用fork和execvp,但我遇到一些错误。我还没有找到任何解决方案,我在这里在线,因为我没有从我的exevp中得到任何错误,也没有运行。这里是我的代码: pid_t child; int status; child = fork(); char *arg[3] = {"test","/home/ameya/Documents/computer_sci

    0热度

    1回答

    我试图运行一段代码将执行几个UNIX命令,这些命令存储在所述阵列lineArray其例如:lineArray = {"ls -l", "ls", "pwd", NULL}; 问题是此代码只会打印出数组中的第一个命令,即使我已经在调试中看到我的函数根据execvp MAN正确解析命令及其参数。 任何形式的帮助将不胜感激。 int startProcesses(int background) { i

    1热度

    1回答

    基本上,我想给exec一个名为“工人”与6个参数是整数程序... char* args[7] = {(char*)"worker",workerID,i+1,msgID,shmID,semaphoreID,NULL}; if(execvp("worker",args)<0){ cerr << "execvp failed" << endl; exit(1); } 如何正

    0热度

    1回答

    最近,我试图在C上做出一个良好的实践,现在我开始执行一个命令。 它告诉我,我应该char**?但我有一些概念错误吗? 请帮帮我。 代码在这里 int excution(int cnt, char token[][BUFSIZE],int *t_token) { setenv ("PATH", "/bin:/bin/usr:", 1); //printf("%s",getenv