- 博客(37)
- 收藏
- 关注
原创 linux学习第31天(条件变量)
线程同步:协同步调,对公共区域数据按序访问。防止数据混乱,产生与时间有关的错误。锁的使用:建议锁!对公共数据进行保护。所有线程【应该】在访问公共数据前先拿锁再访问。但,锁本身不具备强制性。使用mutex(互斥量、互斥锁)一般步骤:pthread_mutex_t 类型。创建锁初始化 1加锁 1-- --> 04. 访问共享数据(stdout)解锁 0++ --> 1销毁锁初始化互斥量:动态初始化。静态初始化。注意事项:尽量保证锁的粒度, 越小越好。
2025-07-13 22:39:21
839
原创 linux学习第30天(线程同步和锁)
协同步调,对公共区域数据按序访问。防止数据混乱,产生与时间有关的错误。数据混乱的原因资源共享(独享资源则不会)调度随机(意味着数据访问会出现竞争)线程间缺乏必要同步机制。
2025-07-12 21:09:05
1272
原创 linux学习第29天(线程)
进程:最小分配资源单位,可看成只有一个线程的进程。有独立的 进程地址空间。有独立的pcb。线程:最小 的执行单位。有独立的pcb,没有独立的进程地址空间。可以用ps -Lf 进程id进行查看,这是打开firefox的进程和线程LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)
2025-07-09 18:25:05
448
原创 linux学习第28天(进程组、会话)
当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID==第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID==其进程ID。组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。
2025-07-03 14:46:48
897
原创 linux学习第27天(信号捕捉特性、内核实现信号捕捉过程、借助信号捕捉回收子进程)
进程正常运行时,默认PCB中有一个信号屏蔽字,假定为☆,它决定了进程自动屏蔽哪些信号。当注册了某个信号捕捉函数,捕捉到该信号以后,要调用该函数。而该函数有可能执行很长时间,在这期间所屏蔽的信号不由☆来指定。而是用sa_mask来指定。调用完信号处理函数,再恢复为☆。XXX信号捕捉函数执行期间,XXX信号自动被屏蔽。阻塞的常规信号不支持排队,产生多次只记录一次。(后32个实时信号支持排队)
2025-07-01 17:08:11
432
原创 linux学习第26天(信号集)
信号集就是一个整数,这整数32位你自己设置,设置好了和系统的mask进行位操作sigset_t set:自定义信号集sigemptyset(sigset_t *set):清空信号集sigfillset(sigset_t *set):全部置1sigaddset(sigset_t *set,int signum):将一个信号添加到集合中sigdelset(sigset_t *set,int signum):将一个信息集合中移除。
2025-06-28 17:11:25
582
原创 linux学习第23天(mmap函数、注意事项)
头文件:sys/mman.h参数:addr:指定映射区的首地址,通常串NULL,表示让系统自动分配length:共享映射区的大小(<=文件的实际大小)prot:共享内存映射区的读写属性。fiags:标注共享内存的共享属性。fd:用于创建共享内存映射区的那个文件的文件描述符offset:默认0(表示映射文件全部)。偏移位置。需是4k的整数倍返回值:成功:返回映射区的首地址。失败:MAP_FAILED,设置errno创建一个共享内存映射区。
2025-06-17 14:37:42
648
原创 linux学习第22天(fifo实现非血缘关系进程间通信\文件用于进程间通信)
左边写端,右边读端,可以多个写端一个读端,也可以一个写端多个读端,但是只有一个能读到,然后回收这是多个写端一个读端。
2025-06-16 14:56:50
125
原创 linux学习第21天(兄弟进程通信、多个读写端操作管道和管道缓冲区大小)
下面是两个写端,一个读端父进程必须等一下,不然可能俩子进程只写了一个,父进程就读完跑路了。
2025-06-12 23:47:51
247
原创 linux学习第20天(进程间通信,管道)
进程间通信的常用方式、特征:管道:简单信号:开销小mmap映射:非血缘关系进程间socket(本地套接字):稳定、、、、、、
2025-06-11 19:30:43
269
原创 linux学习第18天(fork函数)
pid_t fork(void):创建一个子进程成功:父进程返回子进程pid子进程返回0(创建成功)失败:-1。
2025-06-02 14:50:23
246
原创 linux学习第17天(进程和程序以及cpu相关,pcb进程控制块)
程序:死的,只占用磁盘空间 --剧本进程:活的,运行起来的程序,占用内存,cpu等资源 --戏。
2025-05-29 20:30:03
409
原创 linux学习第16天(fcntl实现dup)
未被占用,就=该值的文件描述符。参数3:被占用的,返回最小可用的文件描述符。因为0,1,2,3都被占用,所以为4。修改一下,加上这一段代码。
2025-05-26 09:46:09
251
原创 linux学习第15天(递归遍历目录实现-ls -R)
1.判断命令参数,获取用户要查询的目录名。argv[1]2.判断用户指定的是否为目录。-->封装函数isFile3.读目录:opendir()做出判断普通文件:直接打印目录:拼接目录访问绝对路径。递归调用自己closedir()
2025-05-25 20:05:45
440
原创 linux学习第14天(文件存储,link和Unlink,隐式回收)
dentry:目录项,增加硬链接都是增加目录项当inode为0时,在磁盘上不会被删除,只有下一个文件来覆盖当前文件才会真正意义上的删除。
2025-05-24 19:59:51
1005
原创 linux学习第13天(fcntl函数,lseek函数)
改变一个已经打开的文件的访问控制属性fcntl:fd 文件描述符cmd 命令,决定了后续参数个数、、、获取文件状态:F_GETFL设置文件状态:F_SETFL。
2025-05-23 14:42:47
557
原创 linux学习第12天(阻塞和非阻塞)
1:并且errno = EAGAIN或者EWOULDBLOCK,说明不是read失败,而是read在以非阻塞方式读一个设备文件(网络文件),并且文件无数据。open(“/dev/tty”,O_RDWR|O_NOBLOCK) --设置/dev/tty非阻塞状态,(默认为阻塞状态)读取终端,询问5次,没有输入就时间耗尽,退出程序,有就再打印出来。产生阻塞的场景:读设备文件,读网络文件(读常规文件无阻塞概念)阻塞和非阻塞:是设备文件,网络文件的属性。/dev/tty--终端文件。
2025-05-20 17:04:37
572
原创 linux学习第11天(open函数,read函数,write函数)
1:erron = EAGIN或者EWOULDBLOCK,说明不是read失败,而是read在以非阻塞方式读一个设备文件(网络文件),并且文件无数据。flags 权限控制,只读,只写,读写。read那边的缓冲区一次拷贝1024个字符,(如果拷贝较少的话)会大量进行内核态和用户态的切换,所以非常耗时。fgetc/fputc有个缓冲区,4096,所以它并不是一个字节一个字节地写,内核和用户切换就比较少。fd:文件描述符(-1,3等)fd:文件描述符(-1,3等)buf:存数据的缓冲区。
2025-05-19 20:45:47
962
原创 linux学习第十天(makefile)
1个规则:1个规则:目标:依赖条件(一个tab缩进)命令1.目标的时间必须晚于依赖条件的时间,否则,更新目录2.依赖条件如果不存在,找寻新的规则去产生依赖ALL:指定makefile的终极目标2个函数:src = $(wildcard ./*.c):匹配当前目录下所有.c文件,将文件名组成列表,赋值给src。obj = $(patsubst %.c,%.o, $(src)):将参数3中,包含参数1(.c)的部分,替换为参数2。obj = add.o sub.o div1.o(.o是后缀)
2025-05-11 22:27:51
836
原创 linux学习第八天(静态库,动态库)
静态库在文件中静态展开,所以有多少文件就展开多少次,非常吃内存,100M展开100次,就是1G,但是这样的好处就是静态加载的速度快动态库会将动态库加载到内存,10个文件也只需要加载一次,然后这些文件用到库的时候临时去加载,速度慢一些,但是很省内存动态库和静态库各有优劣,根据实际情况合理选用即可。
2025-05-08 14:54:28
574
原创 linux学习第七天(gcc)
gcc -I ./文件夹 hello.c -s -o hello或者gcc hello.c -o a.out -I 路径。当头文件和源码不在同一级目录下,需要指定头文件,否则会编译失败,这就需要指定头文件。-Wall:显示所有警告信息用于gdb调试下面例子,比如定义变量未使用。gcc编译:gcc -S hello.c -o hello.s。-c:只做预处理,编译,汇编。-D:向程序中“动态”注册宏定义。-I:指定头文件所在目录位置。-g:编译时添加调试文件,-l:指定动态库库名。-L:指定动态库路径。
2025-05-06 17:05:50
444
原创 linux学习第七天(vim)
一段删除:光标选中要删除的首字符,按v进入可视模式,再使用hjkl移动到要删除的末尾,按d删除。区域替换::24,35s /待替换词/替换词/g 替换24-35行之间的目标词。先按“/”,再输入与搜索关键字,回车,继续输入n就继续检索下一个,输入N跳到上一个。全篇替换:%s /替换词/目标词(只能替换每一行的首个)可以加上/g,就全部替换。查看宏定义:命令模式下,光标放在待查看词上,[+d即可查看。d$:删除光标所在位置到行末,工作模式不变。D:删除光标所在位置到行末,工作模式不变。
2025-05-04 15:33:53
729
原创 linux学习第六天(15,其他指令)
ps aux | grep 进程名:结果应该至少两个。man n name:在系统手册第n章查看name。jobs:查看当前操作系统后台运行了哪些用户作业。ifconfig:查看网卡信息(要安装)清屏:ctrl-l、、clear。who:查看当前在线的用户情况。whoami:只查看当前用户。top:文字版任务管理器。alias:给命令取别名。env:查看环境变量。man:系统操作手册。
2025-05-03 17:19:45
207
原创 linux学习第六天(rar压缩和zip压缩)
也可以安装一个aptitude,与apt-get类似,但是可以展示详细信息。rar a -r name 文件(后缀不加.rar会自动加)(r:递归)先安装rar:sudo apt-get install rar。zip -r 压缩包名(.zip后缀) 压缩材料。zip压缩(也可以在windows下使用)unrar x 压缩包名(带上.rar)unzip 压缩包名。
2025-05-03 16:25:11
210
原创 linux学习第六天(压缩命令gzip和bzip2)
v:vision,显示压缩过程,可以去掉,直接用zcf,但这样不显示压缩过程(a.b,cac)压缩名字尽量用tar.gz,方便后期辨识,这个涵盖了解压缩和打包的操作。压缩名字 压缩材料:(使用gzip压缩)解压文件:gunzip、、bunzip2。这个只能压缩文件到一个对应的压缩包,压缩文件:bzip2、、gzip。(使用bzip2 压缩)c:create,创建。
2025-05-03 15:28:45
150
原创 linux学习第五天(软件包安装)
sudo apt-get install softname:安装软件。sudo apt-get remove softname:卸载软件。sudo apt-get update:更新软甲资源列表到本地。使用安装包安装(deb)
2025-05-03 14:50:31
132
原创 linux学习第四天(10,grep和xargs)
ps aux | grep '关键词' -- 检索进程结果集。ps aux 查看当前后台的进程 类似windows的任务管理器。差别在于xargs对结果进行分段处理,检索结果数量很大时性能会更好。用'filename'或者使用转义字符’name\ name'但是xargs用默认空格来分割结果集,文件名有空格会被分割失效。ps监控后台进程工作情况,默认只显示当前可以和用户交互的进程。grep:找文件内容,-n输出行号。
2025-04-30 15:13:54
194
原创 linux学习第四天(7,find命令,以文件为搜索对象)
atime、mtime、ctime 天 amin、mmin、cmin 分钟。find ./ -maxdepth 层数 -name '*后缀'-ok:以交互式方式将find搜索的结果(有点循环确认的感觉)m 表示最近更改时间,指更改文件属性一类的。find ./ -atime 天数(大于天数)-exec:将find搜索的结果执行某一个命令。c 表示最近改动时间,指更改文件内容。find ./ -name '*后缀'a 表示最近访问时间。
2025-04-28 21:47:57
230
原创 linux学习第二天(5,软连接和硬链接)
创建的这个软链接权限和原文件权限不同,能否通过软连接对原文件进行操作还是看原文件,这个5表示文件路径长度。删除时硬链接计数减一,减为0时,inode被释放,文件被删除。如时相对路径创建软连接,在搬移后就会失效。ln -s 文件 文件.?因为他们有相同的Inode。ln 文件 文件.?
2025-04-26 22:40:29
115
原创 linux学习第二天(3-4,目录和文件操作)
cp -a 目录1 目录2: 完全复制目录1到目录2(包括权限,属性,改动时间等)cp file1 file2:创建file2 并复制file1的内容。ls -l 、、ls -l 目录//文件:查看目录详细信息。ls -dl 目录//文件:显示该目录//文件详细信息。cp -r 目录1 目录2: 递归复制目录1到目录2。tail -n file:查看文件从后往前n行。mv file1 目标位置:移动文件到目标位置。head -n file:查看文件前n行。tree:查看目录结构树(要下载。
2025-04-26 21:44:25
341
原创 linux学习第一天
ctrl+z:可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行;ctrl+c:强制终止前台运行的程序(释放资源和内存)(查看鼠标时退出可用);ctrl+d:不是发送信号,表示特殊二进制值(EOF(还不太懂));ctrl+\:终止前台程序并生成core文件;root:管理员宿主目录(家目录);ls:查看当前目录下的所有文件;cd 目标文件:进入目标文件;boot:存放开机启动程序;dev:存放设备文件(鼠标)psw:查看当前所在目录;usr:第三方的库和文件;home:普通用户;
2025-04-24 21:10:43
146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人