Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix:fork()、wait()、exec for命令解释器_Unix_Exec - Fatal编程技术网

Unix:fork()、wait()、exec for命令解释器

Unix:fork()、wait()、exec for命令解释器,unix,exec,Unix,Exec,我一直在开发一个unix c程序,在这个程序中,我要输入一个命令fork(),在子处理器中执行execvp(argv[0],argv),然后等待子处理器完成。然而,我在两个方面遇到了问题。我需要程序能够反复接收命令,直到我作为命令输入“exit”。我不知道如何在C中这样做。第二,当我输入命令时,比如说ls-l,解释器只接受ls命令,而不接受-l,需要帮助解决这个问题。这是我的密码: #include <unistd.h> #include <string.h> #incl

我一直在开发一个unix c程序,在这个程序中,我要输入一个命令fork(),在子处理器中执行execvp(argv[0],argv),然后等待子处理器完成。然而,我在两个方面遇到了问题。我需要程序能够反复接收命令,直到我作为命令输入“exit”。我不知道如何在C中这样做。第二,当我输入命令时,比如说ls-l,解释器只接受ls命令,而不接受-l,需要帮助解决这个问题。这是我的密码:

#include <unistd.h>
#include <string.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;

int main(){
    int pid,status,rs;
    char comm[100];
    
    while(comm!="exit"){
    cout<<"Enter command:\n ";
    cin.getline(comm,100);
    char *token=strtok(comm," ");
    pid=fork();
    if(pid==-1)
    {
        perror("fork");
        exit(pid);
    }
    if(pid==0)
    {
        
        char *argv[]={token,0};
        while(token!=NULL){
        rs=execvp(argv[0],argv);
        token = strtok(NULL, " ");
    }   
    if(rs==-1)
    {
        perror("execvp");
        exit(rs);
    }
    }
    else
    {
        cout<<"Done waiting for: "<<wait(&status)<<endl;
    }
}
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int-pid,状态,rs;
字符通信[100];
while(通信!=“退出”){
库特