摘要: 创建线程比创建进程快10~100倍。#include<pthread.h>int pthread_create(pthread_t *thread, pthread_attr_t *attr, //线程的属性 void *(*func)(void *), //指向线程所运行的函数的指针 void *arg); //func函数的参数void pthread_exit(void *status) 以状态status退出int pthread_join(pthread_t thread, void **retva) retv... 阅读全文
posted @ 2011-12-25 19:51 张朝阳 阅读(566) 评论(0) 推荐(0) 编辑
摘要: 进程和进程之间无非是通过磁盘、内核、用户空间传输数据。通过磁盘(也就是文件)实现进程通信这个好理解,服务器进程把计算结果写入文件,客户端进程从文件读数据就可以了。这里的竞争条件是当服务端正在写文件时,客户端是不允许读的。命名管道把数据写入文件,因此它可以独立于进程存在。但是命名管道是一个队列而非常规的文件,当读者把数据读走后,数据就不存在了,下一次读到的是后面的内容。普通管道位于内核,用于父子进程间通信,因此它的存在依赖于进程的存在。进程间通过文件或FIFO传输数据时,write将数据从内存复制到内核缓冲区,read将数据从内核缓冲区复制到内存。而使用共享内存是不存在用户空间和内核空间的来回复 阅读全文
posted @ 2011-12-25 19:48 张朝阳 阅读(2303) 评论(0) 推荐(1) 编辑
摘要: popen:让进程看起来像文件#include<stdio.h>#include<stdlib.h>int main(){ FILE *fp; char buf[100]; int i=0; fp=popen("who|sort","r"); //打开一个命令,因为是只读"r",所以是要读取命令的输出 while(fgets(buf,100,fp)!=NULL) printf("%3d %s",i++,buf); pclose(fp); return 0;}$ gcc popendemo.c 阅读全文
posted @ 2011-12-25 09:43 张朝阳 阅读(614) 评论(0) 推荐(0) 编辑