进程间通信
调试以下程序给出运行结果并分析其程序原理:
1)编写两个程实现进程的无名管道和有名管道通信。要求分别调用pipe()close()write()read()popen()pclose()mknod()mkfifo()open()实现多个进程间的通信。
#include<stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <wait.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
1.使用无名管道pipe(),进行父子进程之间的通信。
编写的程序如下:
2.以命名行为参数的管道文件的示例。(假设有一个可执行程序chcase,从标准输入设备读字符,将小写字母转化成大写字母并输出。主程序使用popen创建管道,实现蒋某文本文件中的字幕转化成大写字母,其中的文本文件名作为参数传进来。)
3.创建有名管道。
4.软中断机制
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
void waiting(),stop(),alarming();
int wait_mark;
main()
{
    int p1,p2;
    if(p1=fork())            /*创建子进程p1*/
    {
        if(p2=fork())            /*创建子进程p2*/
        {
            wait_mark=1;
            signal(SIGINT,stop);    /*接收到^c信号,转stop*/
            signal(SIGALRM,alarming);/*接受SIGALRM
            waiting();
            kill(p1,16);            /*p1发软中断信号16*/
              kill(p2,17);          /*p2发软中断信号17*/
                    wait(0);              /*同步*/
            wait(0);
            printf("parent process is killed!\n");
            exit(0);
        }
        else
        {
            wait_mark=1;           
            signal(17,stop);
            signal(SIGINT,SIG_IGN);  /*忽略 ^c信号*/
            while (wait_mark!=0);
            lockf(1,1,0);
            printf("child process2  is killed by parent!\n");
            lockf(1,0,0);
            exit(0);
        }
    }
    else
    {
        wait_mark=1;
        signal(16,stop);
signal(SIGINT,SIG_IGN);  /*忽略^c信号*/
        while (wait_mark!=0)
        lockf(1,1,0);
        printf("child process1 is killed by parent!\n");进程通信方式
        lockf(1,0,0);
        exit(0);
    }
}
void waiting()
{
    sleep(5);
if (wait_mark!=0)
kill(getpid(),SIGALRM);
}
void alarming()
{
    wait_mark=0;
}
void stop()
{
    wait_mark=0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。