没有合适的资源?快使用搜索试试~ 我知道了~
操作系统实验一代码解析
需积分: 3 43 浏览量
2008-11-28
13:19:48
上传
评论
收藏 6KB TXT 举报
温馨提示
高等教育出版社的操作系统习题与实验指导 实验一的代码解析(自己写的,如果有不对的地方不好意思啊~~)
资源推荐
资源详情
资源评论


















#include"sys/types.h"
#include"sys/file.h"
#include"unistd.h"
char r_buf[4];//读缓冲
char w_buf[4];//写缓冲
int pipe_fd[2];//两个通道
pid_t pid1,pid2,pid3,pid4;//四个进程
int producer(int id);//生产者
int consumer(int id);//消费者
int main(int argc,char **argv)
{
if(pipe(pipe_fd)<0) //pipe()返回值小于0则创建管道不成功
{
printf("pipe create error.\n");
exit(-1);
}
else //创建管道成功
{
printf("pipe is created successfully!\n");
if((pid1=fork())==0) // 子进程执行,父进程不执行,但是子进程中有exit(id)
producer(1);
if((pid2=fork())==0) // 子进程执行,父进程不执行,但是子进程中有exit(id)
producer(2);
if((pid3=fork())==0) // 子进程执行,父进程不执行,但是子进程中有exit(id)
consumer(1);
if((pid4=fork())==0) // 子进程执行,父进程不执行,但是子进程中有exit(id)
consumer(2);
#include"sys/file.h"
#include"unistd.h"
char r_buf[4];//读缓冲
char w_buf[4];//写缓冲
int pipe_fd[2];//两个通道
pid_t pid1,pid2,pid3,pid4;//四个进程
int producer(int id);//生产者
int consumer(int id);//消费者
int main(int argc,char **argv)
{
if(pipe(pipe_fd)<0) //pipe()返回值小于0则创建管道不成功
{
printf("pipe create error.\n");
exit(-1);
}
else //创建管道成功
{
printf("pipe is created successfully!\n");
if((pid1=fork())==0) // 子进程执行,父进程不执行,但是子进程中有exit(id)
producer(1);
if((pid2=fork())==0) // 子进程执行,父进程不执行,但是子进程中有exit(id)
producer(2);
if((pid3=fork())==0) // 子进程执行,父进程不执行,但是子进程中有exit(id)
consumer(1);
if((pid4=fork())==0) // 子进程执行,父进程不执行,但是子进程中有exit(id)
consumer(2);
}
close(pipe_fd[0]); //关闭管道读操作
close(pipe_fd[1]); //关闭管道写操作
int i,pid,status;
for(i=0;i<4;i++)
pid=wait(&status);//表示父进程关心子进程的完成情况,如果子进程完成了则返回值给父进程
exit(0);
}
int producer(int id)
{
printf("producer %d is running!\n",id);//生产者id正在生产
close(pipe_fd[0]); //关闭管道读操作
int i=0;
for(i=1;i<10;i++) //每个生产者可以生产9次产品
{
sleep(3); //暂停三秒
if(id==1) //生产者1生产aaa
strcpy(w_buf,"aaa\0");
else //生产者2生产bbb
strcpy(w_buf,"bbb\0");
if(write(pipe_fd[1],w_buf,4)==-1) //将w_buf中写4个字符道管道中,等于-1,则写到管道出错
printf("write to pipe error\n");
}
close(pipe_fd[1]); //关闭管道写操作
printf("producer %d is over!\n",id);//生产者id已经生产完毕
exit(id);//子进程退出
close(pipe_fd[0]); //关闭管道读操作
close(pipe_fd[1]); //关闭管道写操作
int i,pid,status;
for(i=0;i<4;i++)
pid=wait(&status);//表示父进程关心子进程的完成情况,如果子进程完成了则返回值给父进程
exit(0);
}
int producer(int id)
{
printf("producer %d is running!\n",id);//生产者id正在生产
close(pipe_fd[0]); //关闭管道读操作
int i=0;
for(i=1;i<10;i++) //每个生产者可以生产9次产品
{
sleep(3); //暂停三秒
if(id==1) //生产者1生产aaa
strcpy(w_buf,"aaa\0");
else //生产者2生产bbb
strcpy(w_buf,"bbb\0");
if(write(pipe_fd[1],w_buf,4)==-1) //将w_buf中写4个字符道管道中,等于-1,则写到管道出错
printf("write to pipe error\n");
}
close(pipe_fd[1]); //关闭管道写操作
printf("producer %d is over!\n",id);//生产者id已经生产完毕
exit(id);//子进程退出
剩余5页未读,继续阅读
资源评论


synthia0592
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
