Linux
文章平均质量分 76
szplzx1314
这个作者很懒,什么都没留下…
展开
-
多线程detach问题
实际上就是因为std::ref(num),这个转换发生在主线程结束之前,还是之后。如果发生在结束前,val结果就正常。如果发生在结束后,val值就是一个UB。运行可知,num的地址和val的地址不同,两个变量明显不是同一块内存。可是我本意目的就是要这个UB,但发现主线程中数据并没有发生改变。由于引用这个东西,本能的我就想到是因为引用的引用,导致这个问题。昨晚无意间敲少敲了&引用,于是出现了子线程中值UB的问题。线程如果先结束,回收num,val还是会改变。于是各种试验,反汇编,查询无果。原创 2023-05-09 13:49:58 · 176 阅读 · 1 评论 -
C++可变参数宏
C++可变参数宏原创 2023-04-28 11:43:42 · 161 阅读 · 0 评论 -
代码管理工具-git
概述代码协同管理工具常用的有snv, git分布式git每个结点都保存完整代码,没有统一的中央服务器,结点之间相互推送下载代码完成共享集中式svn代码集中管理,每次完成代码上传到中央服务器管理,然后统一从中央服务器下载使用多人协同开发备份,防止代码丢失版本管理,多个版本之间进行跳跃多人代码共享传输多人开发,各种模式,方便代码管理git特点...原创 2021-12-23 09:51:29 · 168 阅读 · 0 评论 -
Linux系统编程-线程二
线程同步就是线程间相互协同(协助),相互配合完成某个工作.根本在于协同步调,按照预定先后次序运行其实就是一个线程返回,另一个线程开始.不然会造成数据混乱数据混乱原因线程间资源共享(当然独享的不会)线程间调度时随机的线程间缺少必要的同步机制(协同,步调)共享和随机不能改变,只能通过协同来着手,使线程出现互斥互斥锁mutex公共数据时,锁会阻塞,哪个线程有锁哪个线程执行但是这个锁叫建议锁,没有强制性.也就是说可以不拿锁,直接去访问数据.只能程序员来指定在访问公共数据时,先去拿锁原创 2021-12-20 18:50:50 · 134 阅读 · 0 评论 -
Linux系统编程-线程
线程线程是一个轻量级的进程,本质还是进程(Linux下)(其实可以把它就当成一个回调函数)一个进程分为N个线程,最少有一个线程(例如hello world可以成为单线程程序)线程是调用CPU调度的单位(进程是分配系统资源),线程是最小的执行单位,进程是最小的分配资源单位线程有独立的PCB,但没有独立的地址空间(共享地址空间)而进程有独立的地址空间独立的PCB.(线程依赖于进程,所有线程共享进程资源)线程也叫轻量级进程(light weight process),有自己的PCB,创建线程使原创 2021-12-13 19:29:04 · 1204 阅读 · 0 评论 -
Linux系统编程-守护进程
概念进程组一个进程组有多个进程进程组PID为第一个进程PID,称为组长进程会话一个会话有多个进程组一个会话可以有一个控制终端建立与控制终端链接的进程称为控制进程(会长进程)进程ID 进程组ID 会话ID 都一样的谁控制终端谁就是前端进程组,否则就是后端进程组创建会话调用进程不能是进程组的组长,该进程变成新会话的首进程(会长进程),原因很简单该进程的PPID和它的子进程PID一样(会话是一个新的组),当然如果调用的也会出错该进程称为组长,也称为会长需要root权限(Ubun原创 2021-12-07 18:31:22 · 369 阅读 · 0 评论 -
Linux系统编程-信号
概念(我比较懒,大部分纯属个人理解,非标准)信号简单不能携带大量信息需要满足特定条件才会发送信号发出接收者会立即停止处理信号,处理结束在执行后续指令.它是软中断,并不是真正的中断所有信号的产生处理都是内核完成的,我们只是中间的一条线产生信号按键产生,CTRL + C,(终止进程) CTRL + z(暂停,后台运行,可用fg恢复), CTRL + \(终止进程)等系统调用产生, kill, raise, abort等软件条件产生, 定时器 alarm(sleep其实就是一个定时器原创 2021-12-06 13:15:55 · 1098 阅读 · 0 评论 -
Linux系统编程-进程三
进程案例(父子间)#include <iostream>#include <wait.h>#include <unistd.h>using namespace std;int main(int argc, char** argv){ int pipefd[2]; int pipe_ret = pipe(pipefd); if (pipe_ret == -1) { perror("int pipe_ret = pipe(pipefd);");原创 2021-12-01 20:02:42 · 672 阅读 · 0 评论 -
Linux系统编程-进程二
感觉需要说一下,概念性的东西,都只是个人理解.EXEC函数族头文件#include <unistd.h>execlp(加载一个进程,借助PATH)原型int execlp(const char *file, const char *arg, .../* (char *) NULL */);返回值成功无返回失败返回-1 函数后直接跟(无需判断,因为没有返回,如果成功后续代码不会执行)perror();exit(...原创 2021-11-30 17:20:45 · 1431 阅读 · 0 评论 -
Linux系统编程-进程
CPU存储是越靠近CPU速度越快,容量越小网络->硬盘->内存->缓存(缓存中还分等级)->寄存器(4byte(32位,1byte = 8 bit,32/8=4))CPU中有预取器(取指令)->译码器(就是个翻译官)->ALU(算数逻辑单元(只能做加法和左移))->最后到寄存器然后在缓存等等到磁盘MMU(大小是4K)将虚拟地址映射到物理地址上MMU会把内存分级,常规等级,还有系统等级(当然这个是我说的,不过分级是真的存在)内核内核(操作原创 2021-11-29 16:21:20 · 466 阅读 · 0 评论 -
Linux系统编程-文件IO二
递归创建目录原创 2021-11-29 06:44:08 · 520 阅读 · 0 评论 -
Linux系统编程-文件IO
man 共有九卷,系统编程也就是第二卷的内容,第五卷是文件格式和规范open函数函数原型参数pathname文件名参数flags为访问方式的宏:O_RDONLY(只读),O_WRONLY(只写),O_RDWR(读写)这三个是必须加的O_APPEND(追加),O_CREAT(创建),O_EXCL(是否存在),O_TRUNC(截断,普通文件写操作截断为0),O_NONBLOCK(非阻塞,设置之后后面任何IO操作都不会阻塞)参数mode_t mode是一个八进制数,0777返.原创 2021-11-26 04:09:03 · 694 阅读 · 0 评论 -
linux系统编程最后的准备工作-makefile,gdb调试
vi基本使用之前介绍过就不再叙说了,makefile和GDB这里详细的说一下.当然了,用什么文本编辑,用什么调试最终的目的都是一样的.但是那只是限定于有选择的时候,而开发人员不是消费者,没有选择的时候vi和GDB还是要用的.其实熟练之后命令一定比自然交互要快(无论是鼠标点击,触屏,还是语音),最简单的例子在windows中打开计算器,一定是win + r 然后calc回车更快.makefilemakefile其实也就是一个脚本嘛文件名makefile固定的,全部小写或首字母大写代原创 2021-11-23 23:46:59 · 380 阅读 · 0 评论 -
linux系统编程-静态库和动态库(共享库)
静态库N个程序,需要使用同一个静态库,会加载这个库N次.(可以看成宏函数)动态库(共享库)N个程序,需要使用同一个共享库,这个库只有一份可以在连接时加载到各个程序.(其实可以看成函数调用)计算机嘛,无非时间换空间,空间换时间.时间要求高就静态库,空间要求高就共享库.没有特定要求时函数宏函数,当然选函数了.也就是动态库.制作静态库命令ar rcs libxxx.a xxx.olibxxxlib.a 约定的东西,敲代码嘛,别搞.GCC常用命令GCC编译过程:预处理,原创 2021-11-22 20:07:51 · 1439 阅读 · 0 评论 -
Linux后端开发-shell编程
命令行参数算数运算符算数运算符和C中都一样,但是shell本身并没有这个功能,需要使用expr(他的功能是计算(+-等),关系(><等))其他的算数运算符和C中的一样,取模等也都有.原创 2021-11-21 16:32:26 · 186 阅读 · 0 评论 -
Linux后端开发-POSIX标准以及shell编程
POSIX标准就是定义了类Unix系统提供接口(系统API(应用程序和库之间的编程接口),shell命令)的标准,便于代码的移植.除了API还有ABI应用程序二进制接口他是让一个可执行的文件可以在支持ABI标准的平台上运行主流Unix都支持POSIX标准,但是不仅仅局限于Unix,简单的说市面上绝大部分系统为了兼容性都会支持.(这些不准确啊,只是个人理解,有兴趣了解详情还是查查比较好)当然了,标准嘛一定会跟随时代的改变而改变,例如C/C++也会更新,新的标准.Linux常见系统调原创 2021-11-20 21:40:51 · 2039 阅读 · 0 评论 -
linux文件系统
前面简单的说过linux之后一段时间就和linux玩耍了,也就是linux后端开发.文件系统就是对数据和程序的存储与访问的子系统文件系统文件和目录文件类型文本文件:编码组成(ascll码)二进制可执行文件其他文件会有特定的程序去解析硬盘格式化低级格式化划分磁道和扇区(每个磁道上的扇区数是相等的)高级格式化构建文件系统(是一组数据结构) 分区表:划分磁盘(磁盘分区) 目录fdisk -l//查看系统磁盘数据扇...原创 2021-11-18 22:29:38 · 3822 阅读 · 5 评论 -
makefile
目录语法执行 变量自定义变量系统环境变量预定义变量makefile代码makefile修改单独文件可以节省编译时间自定义变量替换预定义变量替换(最终版本)语法目标:依赖文件命令(需要用tab)通过依赖文件生成目标文件执行 makemake -f 文件名 ...原创 2021-09-21 17:02:06 · 56 阅读 · 0 评论 -
GCC编译器
gcc 编译的过程:预处理、编译、汇编、链接预处理: gcc -E test.c -o test.i编译: gcc -S test.i -o test.s汇编: gcc -c test.s -o test.o链接:gcc test.o -o testgdb调试gcc -g a.c -o testgdb test调试中q退出原创 2021-09-20 12:32:37 · 57 阅读 · 0 评论 -
VIM常用基础
编辑模式(esc)移动G 移动到文件结尾nG 移动到第n行行首gg 移动到文件首ngg 移动到第n行行首j 上k 下h 左l 右5l 是光标向右移动五个字符 ,5j 是...原创 2021-09-20 11:58:54 · 62 阅读 · 0 评论 -
Linux常用命令(Ubuntu)
命令格式 命令 选项 参数帮助 man 选项 命令,系统调用,库函数 选项1命令 选项2系统调用 选项3库函数切换目的 cd /home/用户名 cd 目录(可以绝对路径也可以相对路径) cd (cd ~)到家目录 cd / 到根目录 cd .....原创 2021-09-20 00:41:20 · 102 阅读 · 0 评论 -
Linux(Ubuntu 换源,远程开发配置)
Ubuntu 20.04换源备份原本源sudocp/etc/apt/sources.list/etc/apt/sources.list.bak修改源权限sudo chmod 777 /etc/apt/sources.listsudo gedit /etc/apt/sources.list删除原内容,将下面内容复制过去deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multi...原创 2021-09-19 23:49:34 · 82 阅读 · 0 评论