博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IPC 有命管道
阅读量:5925 次
发布时间:2019-06-19

本文共 1840 字,大约阅读时间需要 6 分钟。

IPC  有命管道

      创建一个有名管道  /tmp/stduent.data

      A 和 B 是 相对独立的两支程序,现在 A  传送  10 个Student 到  B

      B 将Student 读取出来,显示在界面上

   

      然后 B  传送  10 个 Teacher 到  A  ,A 显示 teacher 在界面上

 

A.cpp

#include "public.h"

#define FIFO_NAME "/temp/Linux/my_fifo"

#define BUFFER_SIZE PIPE_BUF
#define TEN_MEG (1024*1024*10)

typedef struct students

{
 int no;
 char username[100];
}*StuNode,SNode;

 

int main()

{

 int pipe_fd;

 int ret;
 int open_mode=O_WRONLY;
 int bytes=0;
 char buffer[BUFFER_SIZE+1];
 SNode stus[10];

 for (int i=0;i<10;i++)
 {
  stus[i].no=i+1;
  strcpy(stus[i].username,"student");
 }

 if (access(FIFO_NAME,F_OK)==-1)
 {
  ret=mkfifo(FIFO_NAME,0777);
  if (ret!=0)
  {
   fprintf(stderr,"Could not create fifo %s\n",FIFO_NAME);
   exit(EXIT_FAILURE);
  }
 }
 printf("Process %d opening FIFO O_WRONLY\n",getpid());
 pipe_fd=open(FIFO_NAME,open_mode);
 printf("Process %d result %d\n",getpid(),pipe_fd);
 if (pipe_fd!=-1)
 {
  while (bytes<10)
  {
   ret=write(pipe_fd,&stus[bytes],sizeof(SNode));
   if (ret==-1)
   {
    fprintf(stderr,"write error on pipe\n");
    exit(EXIT_FAILURE);
   }
   bytes++;
  }
  close(pipe_fd);
 }
 else
 {
  exit(EXIT_FAILURE);

 }

 printf("Process %d finish \n",getpid());
 exit(EXIT_FAILURE);
 return 0;
}

 

 B.cpp

#include "public.h"

#define FIFO_NAME "/temp/Linux/my_fifo"

#define BUFFER_SZIE PIPE_BUF
typedef struct students
{
 int no;
 char username[100];
}*StuNode,SNode;

 

int main()
{
 int pipe_fd;
 int ret;
 int open_mode=O_RDONLY;
 char buffer[BUFFER_SZIE+1];
 int bytes=0;
 SNode stus[10];
 memset(buffer,'\0',sizeof(buffer));
 printf("Process %d opening FIFO O_RDONLY\n",getpid());
 pipe_fd=open(FIFO_NAME,open_mode);
 if (pipe_fd!=-1)
 {
  do
  {
   ret=read(pipe_fd,&stus[bytes],sizeof(SNode));
   printf("no = %d username = %s \n",stus[bytes].no,stus[bytes].username);
   bytes++;
  } while (ret>0);
  close(pipe_fd);
 }
 else
  exit(EXIT_FAILURE);
 printf("Process %d finished,%d bytes read\n",getpid(),bytes);
 exit(EXIT_FAILURE);
 return 0;
}

 

转载地址:http://xdavx.baihongyu.com/

你可能感兴趣的文章
javascript面向对象编程幻灯片效果
查看>>
JQuery层次选择器
查看>>
数据库密码管理基本常识
查看>>
Android 配置
查看>>
android app的类响应式设计【半月谈投稿】
查看>>
Android 应用的动画实践--View Animation篇
查看>>
Oracle 11g 归档模式基本操作
查看>>
安装APK文件到Android虚拟机
查看>>
【Java例题】5.5 映射类的使用
查看>>
我的友情链接
查看>>
电影网站
查看>>
Windows Server 2012 R2 安装GUI
查看>>
RHEL7和RHEL6的版本对比
查看>>
Hadoop1的一些配置项
查看>>
我的友情链接
查看>>
RHEL5学习笔记——RH033(未完)
查看>>
mysql 中的存储过程,函数
查看>>
Python import
查看>>
JavaScript数组功能扩展--差集,并集,合集,去重
查看>>
web项目小总结
查看>>