前言
七天的国庆假期已经结束,紧接着的是七天的工作日,前几天的我感叹假期七天有多短,此时此刻的我就感叹七天有多长!
言归正传,本周的前五天课里,紧接着假期前的IO进程课程,第一天学习了:进程中各种常用函数的接口,多进程中的守护进程;第二天学习了:多线程的创建、执行、退出和回收和线程中各种常用函数的接口;第三天学习了:线程间的通信,包括互斥锁、无名信号量和条件变量,传统进程间通信方式的一部分,包括无名管道和有名管道;第四天学习了:传统进程间通信中的信号,SystemV引入的IPC进程间通信中的消息队列和共享内存;第五天学习了:SystemV引入的IPC进程间通信中的信号灯集,下午进行了这门课的考试,最后会附上这套试卷的改错和分析。
这门课的主要特点是函数接口多、要熟悉和记忆的内容多、易混淆的知识点多,这几天的内容中,重点和难点是线程间通信和进程间通信,因此,本次的总结反思将针对这几方面,进行整理归纳,难点分析和易混淆点辨析。
同样,写此文章,是想以这种碎碎念的方式回顾重点、重复盲点、加深印象,复习、总结和反思本周的学习,仅供后期自己回顾使用。知识体系不够完善,内容也不够详细,仅供笔者复习使用。如果是有需要源码和笔记、或者对这方面感兴趣的同学,都可以私信我,发你完整的知识体系和详细内容的笔记。如有任何错误请多指正,也欢迎友好交流,小弟定会虚心听取大佬们的宝贵意见!
周六
一、进程相关的函数接口
1.1 getpid / getppid函数
直接从字面意思理解,获取当前进程的pid和父进程的pid,功能参数返回值如下,着重注意这两个函数的返回值。
pid_t getpid(void);
功能:获取当前进程的进程号
参数:
@无
返回值:返回当前进程的pid
pid_t getppid(void);
功能:获取父进程的进程号
参数:
@无
返回值:返回父进程的pid
1.2 exit / _exit函数
字面意思理解,退出(结束)进程的函数;
注意两个函数的区别:exit结束进程时会刷新缓存区,_exit结束进程时,不会刷新缓存区;
和 return 区分:return本身并不具备结束进程的功能,只有当return在main函数中使用的时候
才具备结束进程的功能。
#include <stdlib.h>
void exit(int status);
功能:用来结束一个正在执行的进程,会刷新缓冲区(库函数)
参数:
@status:进程退出状态值
#define EXIT_FAILURE 1 //失败退出
#define EXIT_SUCCESS 0 //成功退出
返回值:无
#include <stdlib.h>
void _exit(int status);
功能:用来结束一个正在执行的进程,不会刷新缓冲区(系统调用)
参数:
@status:进程退出状态值
返回值:无
练习:
程序代码如下,请按执行顺序写出输出结果。
#include <head.h>
int main()
{
pid_t pid1, pid2;if ((pid1 = for