c语言wait函数返回值 c语言wait函数怎么用

(计算机操作系统)wait操作和signal操作什么意思?wait操作:
sem_wait是一个函数,也是一个原子操作,它的作用是从信号量的值减去一个“1”,但它永远会先等待该信号量为一个非零值才开始做减法 。也就是说,如果你对一个值为2的信号量调用sem_wait(),线程将会继续执行,将信号量的值将减到1 。
如果对一个值为0的信号量调用sem_wait(),这个函数就会原地等待直到有其它线程增加了这个值使它不再是0为止 。如果有两个线程都在sem_wait()中等待同一个信号量变成非零值 。
那么当它被第三个线程增加 一个“1”时,等待线程中只有一个能够对信号量做减法并继续执行,另一个还将处于等待状态 。sem_trywait(sem_t *sem)是函数sem_wait的非阻塞版,它直接将信号量sem减1,同时返回错误代码 。
signal操作:
sig是传递给signal的唯一参数 。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数 。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行 。
signal()会依参数signum 指定的信号编号来设置该信号的处理函数 。当指定的信号到达时就会跳转到参数handler指定的函数执行 。
当一个信号的信号处理函数执行时,如果进程又接收到了该信号,该信号会自动被储存而不会中断信号处理函数的执行,直到信号处理函数执行完毕再重新调用相应的处理函数 。但是如果在信号处理函数执行时进程收到了其它类型的信号,该函数的执行就会被中断 。
扩展资料:
signal操作的注意点:
1、不要使用低级的或者STDIO.H的IO函数
2、不要使用对操作
3、不要进行系统调用
4、不是浮点信号的时候不要用longjmp
5、signal函数是由ISO C定义的 。因为ISO C不涉及多进程,进程组以及终端I/O等,所以他对信号的定义非常含糊,以至于对UNIX系统而言几乎毫无用处 。
参考资料来源:百度百科-signal
参考资料来源:百度百科-sem_wait
c语言中的wait(&status)status的返回值我查了下文档没有特别说明 , 估计这可能因具体实现而不同吧
不过文档说你可以用
WIFEXITED(stat_val)
WEXITSTATUS(stat_val)
WIFSIGNALED(stat_val)
WTERMSIG(stat_val)
WIFSTOPPED(stat_val)
WSTOPSIG(stat_val)
WIFCONTINUED(stat_val)
这几个宏来解释*status的值的含义
linux中C语言关于进程的创建/*请解释一下*/
while(((child=wait(status))==-1)(errno==EINTR));
这种的目的是父亲进程等待子进程结束c语言wait函数返回值,并回收子进程的资源c语言wait函数返回值,将子进程的退出状态存储在status中,同时,返回该子进程的pid 。
如果wait函数返回-1表示wait函数被其它情况打断返回 , 并没有等待到子进程结束,而同时判断errno的值是不是EINTR(意思是让你try again),那么,让进程继续等待 。因为这个错误并不是真正wait错误,而是被timeout时间等造成的,因此重新等待 。而如果是其它情况,显然是wait函数调用错误 , 即下面的if(child==-1),需要打印错误信息 。‘
//但你这句应该写错了 。应该是逻辑与而不是位与操作 。即
while(((child=wait(status))==-1)(errno==EINTR));
/*请解释一下*/
if(child==-1)
你对信号处理部分还需要努力 。
另外介绍一本书《Linux高级程序设计 第3版》 上面讲得很清楚 。
有问题我们继续交流,一起学习 。
更多技术文章可以关注我的微博,名字c语言wait函数返回值:成都睿尔科技。
c语言中waiting()是什么不是标准函数 , 应是自定义函数 。例如:

推荐阅读