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

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

  hot3.png

//命名管道的打开操作像普通文件的读写操作,可以使用系统的函数调用open()

//或者fopen()来打开文件,读写的操作也像对普通文件的操作一样。
//1.对于读写,命名管道不能再打开时同时用于读和写,打开管道时必须只能选择一种打开模式,知道关闭管道为止
//2.管道的读写是阻塞的,当进程读命名管道而管道内无数据时,读的进程被阻塞,它不会接收到EOF,当进程向管道
//中写数据,但是读入端时(比如管道的进程已经关闭了命名管道),写的进程被阻塞,知道有进程重新打开管道为止
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>

#define FIFO_NAME "/tmp/myfile"

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

int main(int argc,char *argv[])

{
 int pipe_fd;
 int res;
 int open_mode = O_WRONLY;
 int bytes_sent = 0;
 char buffer[BUFFER_SIZE+1];
 
 //判断FIFO是否存在,如果不存在则建立
 if(access(FIFO_NAME,F_OK)==-1){
  res= mkfifo(FIFO_NAME,0777);
  if(res!=0){
   fprintf(stderr,"Could not create fifo %s\n",FIFO_NAME);
   exit(1);
  }
 }
 
 //打开fifo
 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_sent<TEN_MEG){
    res= write(pipe_fd,buffer,BUFFER_SIZE);
    if(res==-1){
     fprintf(stderr,"Write error on pipe\n");
     exit(1);
    }
    bytes_sent++=res;
  }
        close(pipe_fd);
 }else{ 
     exit(1);
 }
 
 printf("Process %d finished\n",getpid());
 
 return 0;

}

转载于:https://my.oschina.net/liubin/blog/23865

你可能感兴趣的文章
ElementUI的Table组件中的renderHeader方法研究
查看>>
Apache Rewrite
查看>>
深入K8S Job(一):介绍
查看>>
generic netlink 编程快速入门
查看>>
JavaScript 编码规范
查看>>
H5页面二次分享
查看>>
PTPD2源码解析之:packet的接收和发送
查看>>
SLB访问日志分析:基于客户端来源和HTTP状态码的实践
查看>>
javascript appendChild()的完整功能
查看>>
小程序实现长按录音,上划取消发送
查看>>
php实现共享内存进程通信函数之_shm
查看>>
Java多线程基础(一)——线程与锁
查看>>
01 【零基础入门】html学习笔记(1)
查看>>
没有对象?new一个!
查看>>
实战PHP数据结构基础之双链表
查看>>
性感慕课-在线被爬
查看>>
【跃迁之路】【437天】刻意练习系列196—Java基础练习(线程)(2018.04.18)
查看>>
es6学习
查看>>
Python每日一练0012
查看>>
Vue.js入门教程-methods
查看>>