欢迎来到天天文库
浏览记录
ID:32391618
大小:207.50 KB
页数:23页
时间:2019-02-04
《系统调用相关函数》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、窗体顶端索引:1.fork、exec和exit对IPC对象的影响2.fcntl记录锁3.管道和FIFO的属性4.管道和FIFO的限制5.pipe函数6.popen和pclose7.mkfifo函数8.SystemVIPC共性描述9.msqid_ds结构10.msgget函数11.msgsnd函数12.msgrcv函数13.msgctl函数14.在SystemV消息队列上使用select和poll15.semid_ds结构16.semget函数17.semop函数18.semctl函数19.shmid_ds结构20.
2、shmget函数21.shmat函数22.shmdt函数23.shmctl函数24.mmap函数25.munmap函数26.msync函数27.匿名内存映射 1.fork、exec和exit对IPC对象的影响IPC类型forkexec_exit 管道和FIFO子进程取得父进程的所有打开着的描述字的拷贝所有打开的描述字继续打开着,除非已设置描述字的FD_CLOEXEC位关闭所有打开着的描述字,最后一个关闭时删除管道或FIFO中残留的所有数据Posix消息队列子进程取得父进程的所有打开着的消息队列描述字的拷贝关闭
3、所有打开着的消息队列描述字关闭所有打开着的消息队列描述字SystemV消息队列没有效果没有效果没有效果Posix互斥锁、条件变量、读写锁、基于内存的信号灯若驻留在共享内存中而且具有进程间共享属性,则共享除非在继续打开着的共享内存中而且具有进程间共享属性,否则消失除非在继续打开着的共享内存中而且具有进程间共享属性,否则消失Posix有名信号灯父进程中所有打开着的有名信号灯在子进程中继续打开着关闭所有打开着的有名信号灯关闭所有打开着的有名信号灯SystemV信号灯子进程中所有semadj值都置为0所有semadj值都携
4、入新程序中所有semadj值都加到相应的信号灯上fcntl记录上锁子进程不继承父进程持有的锁只要描述字继续打开着,锁就不变解开由进程持有的所有未处理的锁mmap内存映射和Posix共享内存区父进程中的内存映射存留到子进程中去除内存映射去除内存映射SystemV共享内存区附接着的共享内存区在子进程中继续附接着断开所有附接着的共享内存区断开所有附接着的共享内存区门所有门描述字都应关闭,因为它们创建时设置了关闭所有打开着的描述字子进程取得父进程的所有打开着的描述字,但是客户在门描述字上激活其过程时,只有父进程是服务器FD
5、_CLOEXEC位 2.fcntl记录锁Unix内核没有文件内记录的概念,这里的记录是指字节范围(byterange)。Posix记录上锁定义了一个特殊的字节范围以指定整个文件,它的其始偏移为0(文件的开头),长度为0。文件上锁是记录上锁的一个特例。粒度(granularity)用于标记能被锁住的对象的大小。对于Posix记录上锁来说,粒度就是单个字节。记录上锁的Posix接口是fcntl函数:#includeintfcntl(intfd,intcmd,…/*structflock*arg*/);
6、返回:成功时取决于cmd,出错时为-1。对应记录上锁的第三个参数arg是指向某个flock结构的指针:structflock{ shortl_type;/*F_RDLCK,F_WRLCK,F_UNLCK*/ shortl_whence;/*SEEK_SET,SEEK_CUR,SEEK_END*/ off_tl_start;/*relativestartingoffsetinbytes*/ off_tl_len;/*#bytes;0meansuntilend-of-file*/ pid_
7、tpid;/*PIDreturnedbyF_GETLK*/};cmd命令有三个:· F_SETLK:获取(l_type为F_RDLCK或F_WRLCK)或释放(l_type为F_UNLCK)由arg指向的flock结构所描述的锁。如果该锁无法授予调用进程,该函数就立即返回一个EACCES或EAGAIN错误而不阻塞。· F_SETLKW:该命令与上一命令相似,不同在于,若所请求的锁无法授予,则调用进程将阻塞到该锁能够授予为止。(W的意思是“等待”)· F_GETLK:检查由a
8、rg指向的锁以确定是否有某个已存在的锁会妨碍新锁授予调用进程。如果当前没有这样的锁存在,由arg指向的flock结构的l_type被置为F_UNLCK。否则,关于这个已存在锁的信息将在由arg指向的flock结构中返回(该结构的内容由fcntl函数覆写),其中包含持有该锁的进程ID。l_whence成员有三个值:· SEEK_SET:l_sta
此文档下载收益归作者所有