您的位置:首页 > 其它

无名管道pipe简单使用

2018-02-27 11:56 507 查看
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数据,操作系统保证其原子性以及顺序问题,这样我就不用加延时。偷懒的做法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  嵌入式