LINUX进程控制(3)
rlen(szBuf));
if(iRet<0){ perror("write fifo fail"); return -2; } int iuSec=int(1000*1000*(double(rand())/RAND_MAX)); usleep(iuSec); } close(fdFifo); return 0; } //WriteFifo.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
//ReadFifo.cpp{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc,char *argv[]) { char szBuf[128]; int iRet,fdFifo; puts("open for reading."); fdFifo=open("MyFifo.pip",O_RDONLY); if(fdFifo<0){ perror("open fifo fail"); return -1; } puts("begin read\n"); while(true){ usleep(int(1000*1000*(double(rand())/RAND_MAX))); iRet=read(fdFifo,szBuf,sizeof(szBuf)); if(iRet<1){ break; }else{ szBuf[iRet]=0; printf("read :%s\n",szBuf); } } close(fdFifo); return 0; } //ReadFifo.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} 5.5. 共享内存 共享内存也是进程间(进程间不需要有继承关系)交流信息的一种常用手段. 通常情况下,OS通过内存映射与页交换技术,使进程的内存空间映射到不同的物理内存,这样能保证每个进程运行的独立性,不至于受其它进程的影响.但是,可以通过共享内存的方式,使不同进程的虚拟内存映射到同一块物理内存,这样,一个进程往这块物理内存的更新数据,另外的进程可以立即看到这块物理内存的修改. 原型: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> key_t ftok(const char *pathname, int proj_id); int shmget(key_t key, int size, int shmflg); void *shmat(int shmid, const void *shmaddr, int shmflg); int shmdt(const void *shmaddr); int shmctl(int shmid, int cmd, struct shmid_ds *buf); 函数ftok用于创建一个关键字,可以用该关键字关联一个共享内存段. 参数pathname为一个全路径文件名,并且该文件可访问. 参数proj_id通常传入一非0字符 通过pathname和proj_id组合可以创建唯一的key 如果调用成功,返回一关键字,否则返回-1 函数shmget用于创建或打开一共享内存段,该内存段由函数的第一个参数标识. 参数key是一个与共享内存段相关联关键字,如果事先已经存在一个与指定关键字关联的共享内存段,则直接返回该内存段的标识.key的值既可以用ftok产生,也可以是IPC_RPIVATE,表示总是创建新的共享内存段; 参数size指定共享内存段的大小,通常是内存页面大小(当前intel处理器为4k)的倍数; 参数shmflg是一掩码合成值,可以是访问权限值与(IPC_CREAT或IPC_EXCL)的合成.IPC_CREAT表示如果不存在该内存段,则创建它.IPC_EXCL表示如果该内存段存在,则函数返回失败结果(-1). 如果调用成功,返回内存段标识,否则返回-1 函数shmat将共享内存段映射到进程空间的某一地址. 参数shmid是共享内存段的标识; 参数shmaddr和shmflg通常为0 如果调用成功,返回映射后的进程空间地址,否则返回(char *)-1. 函数shmdt用于将共享内存段与进程空间分离 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |