实现与编译软中断和管道通信程序

常用函数

1. fork()函数

fork()函数创建一个新进程

调用格式

#include<sys/types.h>

#include<unistd.h>

int fork();

返回值

正确返回时,等于0表示创建子进程,从子进程返回的ID值;大于0表示从父进程返回的子进程的进程ID值。

错误返回时,等于-1表示创建失败。

2. wait()函数

wait()函数常用来控制父进程与子进程的同步。在父进程中调用wait()函数,则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,会产生一个终止状态字,系统会向父进程发出 SIGCHLD信号。当接到信后,父进程提取子进程的终止状态字,从wait()函数返回继续执行原程序。

调用格式:

# include<sys/type.h>

#include<sys/wait.h>

(pid_t) wait(int *statloc)

返回值

正确返回时,大于0表示子进程的进程ID值;等于0表示其他。

错误返回时,等于-1表示调用失败。

3. exit()函数

exit()函数是进程结束最常调用的函数,在main()函数中调用return,最终也是调用exit()函数。这些都是进程的正常终止。在正常终止时,exit()函数返回进程结束状态。

调用格式:

include<stdio.h>

void exit(int status);

其中, status为进程结束状态。

4. kill()函数

kill()函数用于删除执行中的程序或者任务。

调用格式:

kill(int PID, int IID)

其中,PID为要被kill的进程号,IID为向将被kill的进程发送的中断号。

5. signal()函数

signal()函数是允许调用进程控制软中断信号的处理。

调用格式:

include signal. h>

int sig;

void(* func)();

signal(sig, function);

实现软中断通信程序

(1)软中断通信算法流程

(2)代码

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
int wait_flag;
void stop();
main() {
        int pid1, pid2;
        signal(3,stop); // or signal(14,stop);
        while((pid1 = fork( )) == -1);
        if(pid1> 0) {
            while((pid2 = fork( )) == -1);
            if(pid2> 0) {
                wait_flag = 1;
                sleep(5);
                kill(pid1,16);
                kill(pid2,17);
                wait(0);
                wait(0);
                printf("\n Parent process is killed !!\n");
                exit(0);
            }
            else {
                wait_flag = 1;
                signal(17,stop);
                printf("\n Child process 2 is killed by parent !!\n");
                exit(0);
            }
        }
        else {
            wait_flag = 1;
            signal(16,stop);
            printf("\n Child process 1 is killed by parent !!\n");
            exit(0);
        }
}
void stop() {
wait_flag = 0;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值