C语言如何读取argv数组中特定分隔符:之后的命令及参数
实现方案
你原有代码的循环执行结束后,变量i的位置有两种可能:
i < argc:此时argv[i]就是分隔符:,i之后的所有元素就是第二个命令的内容i == argc:输入中没有分隔符:,不存在第二个命令
直接按这个位置读取即可,注意exec系列函数要求传入的参数数组必须以NULL结尾,你原有代码也需要补充这个逻辑,否则执行命令时会出现参数异常。
完整的参数读取代码如下:
int i; char *command1[argc]; char *command2[argc]; // 读取第一个命令的参数 for (i = 0; i < argc; i++) { if (strcmp(argv[i], ":") == 0) break; command1[i] = argv[i]; } // 给第一个命令参数数组补NULL结尾,满足exec函数要求 command1[i] = NULL; int j = 0; // 存在分隔符时读取第二个命令的参数 if (i < argc) { i++; // 跳过分隔符: for (; i < argc; i++, j++) { command2[j] = argv[i]; } } // 给第二个命令参数数组补NULL结尾 command2[j] = NULL;
后续逻辑参考
- 若
command2[0] == NULL,说明输入没有第二个命令,直接执行第一个命令即可 - 若
command2[0]不为空,可创建管道、fork两个子进程分别执行两个命令,实现管道数据传输
小提示:你目前打算用
execlp执行命令的话,因为已经有了完整的参数数组,更建议用execvp,调用方式更简单,执行第一个命令直接写execvp(command1[1], command1 + 1)即可,不需要手动拼接参数。
内容的提问来源于stack exchange,提问作者Ronny Valtonen
相关产品推荐
相关产品推荐

