pipe.c
#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数据,操作系统保证其原子性以及顺序问题,这样我就不用加延时。偷懒的做法。