计算机组成原理--进程通信c常用函数小记

pipe函数

pipe就是无名管道

主要特点如下

半双工,同一时间只能维持一端操作(写入端or输出端)

两个管道,读管道和写管道,两个管道功能单一

储存位置在内存中,且只能作用在父子进程中

数据一旦读走,就会被释放

其中 fd[0] 固定用于读管道,而 fd[1] 固定用于写管道

一般文件 I/O 的函数都可以用来操作管道

当管道里没有数据时,调用 read() 函数从管道中读数据是阻塞的

当管道里数据满时,调用 write() 函数向管道里写数据也是阻塞的

fork函数

fork 函数会生成一个新的进程

调用 fork 函数的进程为父进程,新生成的进程为子进程。

在父进程中返回子进程的 pid(也就是进程id),在子进程中返回 0,失败返回-1

根据返回数据不同,可以判断处于父子进程的哪一个进程

新的进程分配资源,如存储数据和代码的空间。

然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。

lockf函数

lockf函数主要执行对进程的控制

利用系统调用lockf(fd,mode,size),对指定区域(有size指示)进行加锁或解锁,以实现进程的同步或互斥。

其中,fd是文件描述字,也就是管道名

mode是锁定方式,mode=1表示加锁,mode=0表示解锁;

size是指定文件fd的指定区域,用0表示从当前位置到文件结尾

注:有些Linux系统是locking(fd,mode,size)

wait函数

wait进程等待函数

wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;

如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

wait函数一般是和fork函数成对出现的,wait存在的主要意义就是为了处理僵死状态的子进程,确保进程可以顺利执行

与wait相似的还有一个函数是waitpid,主要区别是可以设置不同的值以达到不同的效果

1.pid>0时,只等待进程ID等于pid的子进程,不管其它已经有多少子进程运行结束退出了,只要指定的子进程还没有结束,waitpid就会一直等下去。

2pid=-1时,等待任何一个子进程退出,没有任何限制,此时waitpid和wait的作用一模一样。

3.pid=0时,等待同一个进程组中的任何子进程,如果子进程已经加入了别的进程组,waitpid不会对它做任何理睬。

4.pid<-1时,等待一个指定进程组中的任何子进程,这个进程组的ID等于pid的绝对值。



以上就是我个人对c语言进程管理相关函数的总结

如果有错误的地方,欢迎评论指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值