• 大小: 2KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: 其他
  • 标签: 重定向  管道  

资源简介

使用fork(),exec(),dup2(), pipe(),open()系统调用完成与下列shell命令等价的功能:grep -v usr result.txt

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define MAX_PARA_NO 128

int main()
{
    int n pfd[2];
    char buffer[128] = ““;
    char *in *out *buffer2 *cmd1 *cmd2;
    char *para1[MAX_PARA_NO] *para2[MAX_PARA_NO];

    strcpy(buffer “grep -v usr < /etc/passwd | wc -l > result.txt“);//待处理命令

    signal(SIGCLD SIG_DFL);//忽略SIGCLD信号,子进程终止后,系统会自动销毁僵尸子进程

    buffer2 = strstr(buffer “|“);//定位管道位置
    in = strstr(buffer “<“); //定位重定向输入文件位置
    out = strstr(buffer “>“);//定位重定向输出文件位置

    if (in) {
        *in = ‘\0‘;
        in = strtok(in + 1 “ <>\t\n“);//获取输入重定向文件名
    }
    if (out) {
        *out = ‘\0‘;
        out = strtok(out + 1 “ <>\t\n“);//获取输出重定向文件名
    }
    if (! buffer2)
        exit(0);
    else {
        *buffer2 = ‘\0‘;
        buffer2++;
    }

    cmd2 = strtok(buffer2 “ <>\t\n“);//获取第二个命令
    if (! cmd2)
        exit(1);
    //获取第二个命令及选项
    para2[0] = cmd2; 
    for (n = 1; para2[n]; n++) {
        para2[n] = strtok(N

评论

共有 条评论