随笔分类 - linux
摘要:所有进程共享3~4G的内核空间,所以基于内核之间的通信能够实现(为了保证安全,每个进程的用户地址空间都是独立的,一般而言一个进程不能直接访问另一个进程的地址空间,不过内核空间是每个进程都共享的,所以进程之间想要进行信息交换就必须通过内核)。 线程之间的通信: 1. 不同进程的线程之间要进行通信,那就
阅读全文
摘要:信号无优先级。 信号是异步事件; 异步事件:a进程向b进程发送了一个信号,进程a不用等到进程b响应才往下执行 同步事件:a进程向b进程发送了一个信号,进程a要阻塞到进程b响应才往下执行 1~31的信号:非实时信号,发送的信号可能丢失,不支持信号排队 32~61的信号:实时信号,支持信号排队,发送的多
阅读全文
摘要:当创建一个子进程后,该进程会进入就绪状态,再根据系统的调度,获得时间片,就进入运行状态,在运行状态的进程调用return等进程就结束了;如果在运行状态的进程调用read、write等带阻塞的函数,进程就会进入挂起状态。
阅读全文
摘要:exec函数是为了在子进程中执行其他的可执行程序(代码替换) 子进程调用exec函数并不创建新的进程,所以前后进程的ID不会改变,exec函数只是用另一个新程序代替当前进程的正文、数据、堆、栈,exec函数结束后(成功就不返回了,失败会返回-1),exec函数后的代码不会执行 l(list):参数列
阅读全文
摘要:wait()函数:以阻塞的方式等待子进程退出,防止僵尸进程的产生 头文件: #include <sys/types.h> #include <sys/wait.h> pid_t waitpid(pid_t pid, int *wstatus, int options); 原型: pid_t wait
阅读全文
摘要:进程链#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; int i; //printf("pid = %d\n",getpid()); for(i = 0; i< 5;i
阅读全文
摘要:操作文件内核中的结构变化: 在创建一个子进程时,子进程也会有一个进程表项,子进程进程表项中的文件描述符表是复制的父进程的。
阅读全文
摘要:在fork之前的printf和write函数只会父进程调用一次,子进程不会调用,因为那时子进程还没有创建出来。当fork时,子进程被创建,程序只会往下顺序执行,但是前面父进程分配的数据段、堆、栈(如红框)会被复制一份到子进程 输出如下:
阅读全文
摘要:1. 主进程在fork出一个子进程后,会将自己4G的空间复制一份给子进程(包括代码段、数据段、堆、栈),代码段共享同一物理内存,因为子进程中的代码和父进程中的代码是一样的,只是对pid有一个判断,才会走不同的分支; 输出: 红框中的代码在父进程和子进程都有一份,他们是一样的,只是他们通过判断是父进程
阅读全文
摘要:区别: 全缓存刷新io缓存的条件: 1. 文件写满; 2. 关闭文件; 3. 进程以return、exit终止
阅读全文
摘要:c程序的启动过程(进程的启动过程): 首先,每个c程序都是从主函数开始,但是在主函数调用之前内核会启动一个特殊的例程,叫启动例程,然后这个启动例程会调用main函数 每个进程在终止前都会调用一个终止函数,终止函数的默认动作就是清缓存、释放资源等,当然也可以自己定义终止函数,然后再向内核注册,让进程终
阅读全文
摘要:内核中每个启动的进程都是对task_struct结构体(进程表项、进程控制块pcb process control block)的抽象 内核中进程的结构: 内核中为每个进程维护了一个task_struct的结构体,该结构体就是对进程的抽象,进程的所有状态、信息、策略等都用这个结构体表示。 进程可以操
阅读全文
摘要:硬盘上的文件系统包括:目录项、i节点、数据块 当在磁盘上有个文件(iotek.txt)时,在磁盘上的会保存它的目录项,目录项中有i节点标号,通过编号可以找到i节点;然后在i节点中也保存着数据块的编号和硬链接数(1),数据块中就存放着文件内容。 当创建一个硬链接(h_iotek)时, 会在磁盘上创建一
阅读全文
摘要:文件的属性是用一个结构体来封装的: 文件属性的操作函数: 文件的类型: 函数操作: 文件权限: access函数(检查指定文件是否具有某种操作) 头文件: #include <unistd.h> 原型: int access(const char *pathname,int mode) 参数: pa
阅读全文
摘要:1. dup2(实现输入/输出重定向) 头文件: #include <unistd.h> 原型: int dup2(int oldfd, int newfd); 参数: oldfd:被复制的文件描述符 newfd:新的文件描述符,将oldfd的文件表项指针复制给newfd的文件表项指针,即newfd
阅读全文
摘要:1. 环境变量 linux系统中,环境变量分为系统级和用户级: 系统级: 在/etc/environment配置文件中的环境变量对所有进程有效 在/etc/profile配置文件中的环境变量对所有用户有效 用户级:在~/.profile配置文件中的环境变量对当前用户有效 在~/.bashrc配置文件
阅读全文
摘要:在用户空间操作文件:就是通过些文件描述符来对文件进行读写操作 在内核空间对文件的操作呢? 在内核中用三种数据结构(都是些结构体)来表示一个打开的文件(即将这三种数据结构来组织成一个文件): 在用户空间调用open、read、write等会在内核中产生这三种数据结构(结构体)来保存文件的状态信息
阅读全文
摘要:1. open 头文件: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 原型: int open(const char* pathname, int flags);//这种原型是打开一个已经存在的文件 int open
阅读全文