无名管道pipe简单使用
2018-02-27 11:56
507 查看
pipe.c
一般pipe用于多进程间通信,而且用于和父进程间的通信,但我的应用场景为,同一进程内从底层读取数据供上层应用使用,这样做可以省掉原子操作以及顺序性,管道默认开4KB的内存,如不大于4KB数据,操作系统保证其原子性以及顺序问题,这样我就不用加延时。偷懒的做法。
#include <sys/types.h> #include <sys/stat.h> #include <sys/termios.h> /* for winsize */ #include <sys/ioctl.h> #include <stdio.h> /* for convenience */ #include <stdlib.h> /* for convenience */ #include <stddef.h> /* for offsetof */ #include <string.h> /* for convenience */ #include <unistd.h> /* for convenience */ #include <signal.h> /* for SIG_ERR */ #include <pthread.h> #define MAXLINE 64 int fd[2]; void Thread_Deal(void *arg){ char line[MAXLINE]; int n,i; while(1){ n = read(fd[0], line, MAXLINE);//fd[0]为管道读,默认阻塞 printf("%s",line); memset(line,0,sizeof(line)); } } int main(void) { int n; if (pipe(fd) < 0) err_sys("pipe error"); for(n =0; n<5000;n++){ char *tem = (char *)malloc(10); int len =0; sprintf(tem,"%d\n",n); len = write(fd[1],tem,strlen(tem)); printf("write len:%d\n",len); free(tem); } pthread_t thread_pool[1]; pthread_t *thread_pointer; thread_pointer = thread_pool; pthread_create(thread_pointer, NULL, Thread_Deal, NULL); pthread_join(thread_pool[0], NULL); }
一般pipe用于多进程间通信,而且用于和父进程间的通信,但我的应用场景为,同一进程内从底层读取数据供上层应用使用,这样做可以省掉原子操作以及顺序性,管道默认开4KB的内存,如不大于4KB数据,操作系统保证其原子性以及顺序问题,这样我就不用加延时。偷懒的做法。
相关文章推荐
- 无名管道pipe的使用
- 1.5 简单的无名管道使用
- Linux环境编程--如何用C语言创建多进程运行以及简单的pipe管道使用
- 无名管道pipe使用方法
- 关于Linux_shell中的管道命令pipe “|”的简单学习和使用
- 无名管道pipe的使用
- 无名管道pipe的使用
- 无名管道(pipe)使用实例
- 使用无名管道pipe实现进程间通信
- 在.NET程序中使用PIPE(管道技术)
- Linux内核中无名管道pipe和有名管道fifo的分析
- Linux进程间通信(一)之无名管道(PIPE)和有名管道(FIFO)
- 《Lua程序设计》9.2 管道(pipe)与过滤器(filter) 包含使用协同函数实现“生产者——消费者”问题的实例代码
- 【python】使用unix管道pipe处理stdout实时数据
- Redis管道简单使用及与普通方式效率对比
- 管道函数(pipelined function)简单使用示例
- Linux管道pipe使用实例
- IPC——无名管道pipe
- Linux内核中无名管道pipe和有名管道fifo的分析
- 练习--LINUX进程间通信之无名管道PIPE