美文网首页
系统 第四天 进程的创建,结束,无名管道

系统 第四天 进程的创建,结束,无名管道

作者: ie大博 | 来源:发表于2016-12-02 11:13 被阅读0次

    exec 创建进程

    • 然后并不理解有什么用,启动另外一个进程,本身进程结束
    #include<unistd.h>
    #include<stdio.h>
    #include<errno.h>
    #include<string.h>
    int main()
    {
        int ret =-1;
    //  ret = execl("/bin/ls","ls","/home/alex","-l",NULL);
    //  ret = execl("while","while",NULL);
        //第一个参数是这个命令在哪,后面的就是命令执行的方式
        char *const argv[] ={"gedit","Dircopy.c",NULL};
        ret = execv("/usr/bin/gedit",argv);
    //  printf("errno = %d\n",errno);
    //  printf("error:%s\n",strerror(errno));   
        if(-1 == ret)
        {
            perror("execlp");
            return -1;
        }
        return 0;
    }
    

    结束进程

    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    void fun1()
    {
        printf("fun1,,,");
    }
    void fun2()
    {
        printf("fun2,,,");
    }
    void fun3()
    {
        printf("fun3,,,");
    }
    int main()
    {
        atexit(fun1);
        atexit(fun2);
        atexit(fun3);
    // _exit(-1);//直接结束进程
    //  exit(-1);//自杀,不会出现打印helloworld。
        abort();//中间放弃,核心已转储:非正常结束
        printf("helloworld\n");//当程序遇到return 0;也没有立即结束,
        //会做一下善后工作,然后进入内核层,atexit会被执行,执行的顺序
        //和注册相反
        return 0;
    }
    

    管道

    • grep抓取
    • 要想实现在一个管道实现交流,就是说和读进行,不能都说,或者都读
    • 通过pipe建立的管道叫做无名管道
    #include <unistd.h>
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int pipefd[2] = {-1};
    //
        int ret = -1;
        ret = pipe(pipefd);
        if(-1==ret)
        {
            perror("pipe");
            return -1;
        }
        pid_t pid = -1;
        pid = fork();
    
        if(pid > 0)//父进程
        {
            char caBuf[64]={'\0'};
            int iSign = 0;
    
            while(1)
            {
                memset(caBuf,'\0',sizeof(caBuf));
                if(0 == iSign)
                {
                    printf("father write data:\n");
                    scanf("%s",caBuf);
                    write(pipefd[1],caBuf,strlen(caBuf));
                    iSign = 1;
                }
                else if(1==iSign)
                {
                    read(pipefd[0],caBuf,sizeof(caBuf));
                    printf("child says:%s\n",caBuf);
                    iSign = 0;
                }
                sleep(1);
            }
        }
        else if(0==pid)//子进程
        {
            char caBuf[64]={'\0'};
            int iSign = 0;
    
            while(1)
            {
                memset(caBuf,'\0',sizeof(caBuf));
                if(0 == iSign)
                {
                    read(pipefd[0],caBuf,sizeof(caBuf));
                    printf("父亲说:%s\n",caBuf);
                    iSign = 1;
                }
                else if(1==iSign)
                {
                    printf("孩子说:\n");
                    scanf("%s",caBuf);
                    write(pipefd[1],caBuf,strlen(caBuf));
                    iSign = 0;
                }
                sleep(1);
            }
    
        }
        else if(-1 == pid)
        {
            perror("fork");
            return -1;
        }
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:系统 第四天 进程的创建,结束,无名管道

          本文链接:https://www.haomeiwen.com/subject/pwkxmttx.html