摘要: 匿名管道 管道也叫无名(匿名)管道,它是UNIX系统IPC(进程间通信)的最古老形式,所有的UNIX系统都支持这种通信机制。 统计一个目录中文件的数目命令:ls | wc -l。为了执行该命令,shell创建了两个进程来分别执行ls和wc。 上述 | 称之为管道符,会将ls得到的结果通过管道传输给w 阅读全文
posted @ 2023-02-08 22:52 小秦同学在上学 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 进程间通信(IPC) 你知道进程间通信方式有哪几种吗? 某种方式具体原理? 进程是一个独立的资源分配单元,不同进程之间是独立的,没有关联,不能在一个进程直接访问另一个进程的资源 但是进程不是孤立的,不同的进程需要进行信息的交互与状态的传递,因此需要进程间通信 ####进程间通信目的 数据传输:一个进 阅读全文
posted @ 2023-02-08 22:14 小秦同学在上学 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 进程退出 #include<stdlib.h> void exit(int status); #include<unistd.h> void _exit(int status); status:是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取到 exit()在进程推出前刷新IO缓冲区 阅读全文
posted @ 2023-02-08 22:04 小秦同学在上学 阅读(32) 评论(0) 推荐(0) 编辑
摘要: exec函数族 一般先创建一个子进程,再在子进程中调用exec函数族 会根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,即在调用进程内部执行一个可执行文件 exec函数族执行成功后不会返回,因为调用进程的实体,包括代码段、数据段和堆栈都已经被新的内容取代,只留下进程ID等表面上的信息,只 阅读全文
posted @ 2023-02-08 21:07 小秦同学在上学 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 父子进程之间的关系 ####不同点 fork函数的返回值不同 父进程中:>0 返回的是子进程ID 子进程中:=0 PCB中的一些数据 当前进程的id pid 当前进程的父进程的id ppid 信号集 共同点 某些状态下:子进程刚被创建出来,还没有执行写操作 用户区的数据 文件描述符表 父子进程对变量 阅读全文
posted @ 2023-02-08 20:37 小秦同学在上学 阅读(29) 评论(0) 推荐(0) 编辑
摘要: fork进程创建 创建子进程,会复制当前的父进程 子进程和父进程运行在分开的内存空间,但是在fork()时两者有相同的内容 fork:用于创建子进程 #include <sys/types.h> #include <unistd.h> pid_t fork(void); 作用:用于创建子进程 返回值 阅读全文
posted @ 2023-02-08 20:15 小秦同学在上学 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 程序和进程 程序:(文件) 进程:(资源) 并行与并发 并行:同一时刻,有多条指令在多个处理器上同时执行 并发:在同一时刻只能有一条指令执行,但多个进程指令被快速轮换,使得宏观上具有多个进程同时执行的效果 进程控制块 为了管理进程,内核为每个进程分配一个进程控制块,进程控制块为task_struct 阅读全文
posted @ 2023-02-08 17:39 小秦同学在上学 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 标准C库: #include <stdio.h> int fseek(FILE *stream, long offset, int whence); Linux库: #include <sys/types.h> #include <unistd.h> off_t lseek(int fd, off_ 阅读全文
posted @ 2023-02-08 16:59 小秦同学在上学 阅读(91) 评论(0) 推荐(0) 编辑
摘要: /* #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 参数: -fd:文件描述符,open()得到,通过这文件描述符操作某个文件 -buf:需要读取数据存放的地方,数组的地址 -count:指定的数组的大小 返回值 阅读全文
posted @ 2023-02-08 16:43 小秦同学在上学 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 文件描述符 程序只占用磁盘空间,不占用内存空间 程序启动后产生进程,进程在内存中 通过fopen()会返回一个文件描述符,用于定位操作文件 文件描述符位于虚拟存储空间的内核区 PCB:进程控制块,用于需要管理的数据 PCB内部有一个数组(文件描述符表,以为一个进程可以同时打开多个文件 在文件描述符表 阅读全文
posted @ 2023-02-08 15:56 小秦同学在上学 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 虚拟地址空间 实际上不存在 虚拟内存,用于解决内存不足或段错误 32位机器:2^32 64位机器:2^48 MMU:内存管理单元会讲虚拟地址空间映射到真实地址空间中 用户区:NULL在受保护的地址 栈空间:高地址向低地址存 堆空间:低地址向高地址存 内核区:用户只可以通过系统调用修改内核数据 阅读全文
posted @ 2023-02-08 15:38 小秦同学在上学 阅读(11) 评论(0) 推荐(0) 编辑
摘要: IO I input O output 内存角度 输入:文件读取数据到内存 输出:内存数据写到文件 标准C库IO函数 标准C库IO函数(不属于操作系统,在不同的平台上通过相同的函数调用不同的系统api) 跨平台(可以在windows和linux运行) 效率高 文件描述符:指向已经打开的文件 文件读写 阅读全文
posted @ 2023-02-08 15:21 小秦同学在上学 阅读(14) 评论(0) 推荐(0) 编辑
摘要: GDB GDB是由GNU软件社区提供的调试工具,同GCC配套组成一套完整的开发环境 启动程序,按照自定义要求随性所欲运行程序 在所指定的断点处停止 程序停止时,可以检查程序中所发生的事 可以改变程序,将一个bug产生的影响修正去测试其他的bug 1、编译生成带有调试信息的参数 -g 2、GDB命令的 阅读全文
posted @ 2023-02-08 15:02 小秦同学在上学 阅读(25) 评论(0) 推荐(0) 编辑