概述
1、编制实现管道通信的程序。
使用系统调用 pipe()函数建立一条管道线,两个子进程分别向管道各写一句话。
Child process 1 is sending a message!
Child process 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求∶父进程先接收子进程P1发来的消息,然后再接收子进程 P2发来的消息
要点:1.需要创建三个进程,一个父进程两个子进程
2.可以通过控制信号量来控制先执行进程P1,再执行进程P2.
其中信号量P,V设置如下:
int init_sem(int sem_id, int n,int init_value)
{
union semun{
int val;
struct semid_ds *buf;
unsigned short *array;
};
union semun sem_union;
sem_union.val = init_value;
if(semctl(sem_id, n, SETVAL, sem_union) == -1)
{
perror("Initialize semaphore");
return -1;
}
return 0;
}
int del_sem(int sem_id)
{
if (semctl(sem_id, 0, IPC_RMID,NULL) == -1)
{
perror("Delete semaphore");
return -1;
}
}
int sem_p(int sem_id,int n)
{
struct sembuf sem_b;
sem_b.sem_num = n;
sem_b.sem_op = -1;
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b, 1) == -1)
{
perror("P operation");
return -1;
}
return 0;
}
int sem_v(int sem_id,int n)
{
struct sembuf sem_b;
sem_b.sem_num = n;
sem_b.sem_op = 1;
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b, 1) == -1)
{
perror("V operation");
return -1;
}
return 0;
}
最后
以上就是成就冬天为你收集整理的编制实现管道通信的程序。的全部内容,希望文章能够帮你解决编制实现管道通信的程序。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复