线程同步 同步即协同步调,多个线程对公共区域数据按序访问,防止数据混乱,产生与时间有关的错误。 线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其他进程为保证数据一致性,不能调用该功能。 因此,当有多个控制流共同操作一个共享资源时,就需要同步 数据混乱原因 资源共享(独享资源则不会) 调度随机(意味着数据访问会出现竞争…
进程组和会话 进程组是多个进程的集合,而会话是多个进程组的集合 每个进程都属于一个进程组,当父进程创建子进程的时候,默认子进程与父进程属于同一进程组 进程组ID = 第一个进程ID(组长进程) 可以使用kill -SIGKILL-进程组ID(负的)来将整个进程组内的进程全部杀死 只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关 创建…
示例程序mycp.c如上图所示,实现文件内容的复制。 经过编译后,执行./mycp open.c open2.c,程序执行成功。 解析 main函数参数: argc,即argument count,表示传递给程序的参数个数,程序本身的名字也计数在内。 argv,即argument vector,是一个字符串数组,包含所有传递给程序的参数。argv[…
相关概念 信号是软件层面上的“中断”。一旦信号产生,无论程序执行到什么位置,必须立即(用户感觉是立即,其实是要等待一个从用户区进入内核区的契机,站在CPU的时间量级上具有延迟性)停止运行,转而去处理信号,等信号处理结束,再继续执行后续指令。 每个进程收到的所有信号,都是由内核发送并处理的 与信号相关的事件和状态 产生信号: 按键产生,如:ctrl+…
IPC方法(Inter-Process Communication) Linux 环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核。在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提…
目的:在用vim打开空文件时,会根据后缀自动加载对应的模板文件,减少每次新建文件的重复输入 设置步骤: 在/usr/share/vim/vimfiles目录下新建一个自定义后缀的模板文件,比如template.c,在里面自定义模板内容 编辑/etc/vimrc,找到下面这一行: autocmd BufNewFile *.spec 0r /usr/s…
将选定的文本加粗:Ctrl + B 使选中的文本变成斜体:Ctrl + I 将选定的文本转换为链接:Ctrl + K 在选定的文本下划线:Ctrl + U 让选择的文本成为代码:Shift + Alt + X 将当前标题转换为段落:Shift + Alt + 0 将当前段落或标题转换为级别1至6的标题:Shift + Alt + 1 - 6 添加代…
重定向 概念:在 Linux系统中,重定向是将命令的输入或输出从默认的终端设备(如屏幕)重定向到其他位置(如文件)或从其他位置读取数据。常见的重定向操作包括: 输出重定向:将命令的输出写入文件,而不是显示在终端上 追加重定向:将输出追加到文件末尾,而不是覆盖 输入重定向:从文件中读取输入,而不是从终端键盘输入 这些重定向符号分别是 >(输出重…
open/close函数 查看open函数帮助手册: 终端:man 2 open(按G跳转到末尾,一般会有小demo) vim:光标移到函数处,命令模式下输入2K(2代表系统调用) 头文件可简化为:#include<unistd.h>和#include <fcntl.h> open函数返回值为文件描述符,三个参数分别为:文件…
gdb调试工具 前提:编译时添加 -g选项,得到调试表 gcc gdbtest.c -o a.out -g 如果忘记加 -g选项编译就进入gdb调试,报错如下: 解决方法: 退出gdb调试工具,重新加上 -g选项再编译 不退出gdb调试工具,输入命令file a.out即可 常用指令: 打开gdb调试工具:gdb ./a.out 列出源码以及行号:…