拆分管道字符串

时间:2018-03-06 19:38:11

标签: c++ unix

我正在为我的项目实现管道功能。到目前为止,当我将常量数组固定到execlp()并在我的管道函数中执行它时,它工作正常。但是当我尝试使用用户输入并将其拆分时,我总是得到"无效的尾随选项,试试 - 更多信息"。它不仅仅是使用head命令。 ""是用户从getline()输入的字符串。

int fd[2];
char *d[2];
d[0] = strtok(a, "|"); // array for the different tokens in the command
d[1] = strtok(NULL, "|");
pid_t cpid;
pipe(pfd);
cpid = fork();
if(cpid == 0){
/* child */
    dup2(pfd[1], 1);
    close(pfd[0]);
    close(pfd[1]);  /* the child does not need this end of the pipe */
    execString(d[0]);
    //perror(cmd2[0]);
    cout << "error";
} else{
    cpid = fork();
    if(cpid == 0){
 /* parent */
    dup2(pfd[0], 0);
    close(pfd[0]);
    close(pfd[1]);  /* the parent does not need this end of the pipe */
    execString(d[1]);
    //perror(cmd1[0]);
    cout << "error";
} else{
    int status;
    close(pfd[0]);
    close(pfd[1]);  
    waitpid(cpid, &status, 0);
    perror("fork");
    exit(1);

}


}   

当我运行诸如man date之类的命令时,这是我为execvp()执行字符数组而创建的方法。 grep os,它会显示日期手册,但grep OS会失败。所以字符串函数只能工作一半?这真让我困扰。有什么想法吗?

void execString(char *b){
enum { MAX_ARGS = 64 };
char *args[MAX_ARGS];
char **next = args;

char *temp = strtok(b, " ");
while (temp != NULL)
{
    *next++ = temp;
    //printf("%s\n", temp);
    temp = strtok(NULL, " ");
}
*next = NULL;
execvp(args[0], args);
}

0 个答案:

没有答案