![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux系统编程
sinat_36070482
厚积薄发
展开
-
Linux系统编程 103 setitimer函数
setitimer函数原创 2022-10-11 09:04:55 · 128 阅读 · 0 评论 -
Linux系统编程 102 alarm函数
Linux系统编程 alarm函数原创 2022-09-30 09:01:08 · 350 阅读 · 0 评论 -
Linux系统编程 101 kill 函数和kill命令
信号的产生终端按键产生的信号Ctrl + c -> 2) SIGINT(终止/中断) INT -InterruptCtrl + z -> 20)SIGSTP(暂停/停止) T - TerminalCtrl + \ -> 3) SIGQUIT(退出) 硬件异常产生信号除0操作 -> 8) SIGFPE(浮点数异常) 非法访问内存 -> 11)SIGSEGV(段错误)总线错误 -> 7) SIGBUS$cat k...原创 2022-05-02 14:08:34 · 666 阅读 · 0 评论 -
Linux系统编程 100 信号四要素和常规信号一览
信号的编号可以使用kill -l 命令查看当前系统可使用的信号有哪些$kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTER...原创 2022-05-01 17:18:26 · 454 阅读 · 0 评论 -
Linux系统编程 99 信号屏蔽字和未决信号集
学习笔记阻塞信号集(信号屏蔽字)概念将某些信号加入集合,对他们设置屏蔽,当屏蔽某个信号后,再收到该信号,该信号的处理将推后(解除屏蔽后)未决信号集概念1.信号产生,未决信号集中描述该信号的位立刻翻转为1,表信号处于未决状态。当信号被处理对应位翻转回0.这一时刻往往非常短暂。2.信号产生后由于某些原因(主要是阻塞)不能递达,这类信号的集合称之为未决信号集,在屏蔽解除前,信号一直处于未决状态。阻塞信号集和未决信号集都在PCB中截图1未决信号集和信号屏蔽字的本质都是位...原创 2022-02-17 23:42:35 · 925 阅读 · 0 评论 -
Linux系统编程 98 信号的相关的概念
学习笔记与信号相关的事件和状态产生的信号:1.按键产生ctrl + c 终止ctrl+z 挂起,暂停,跑到后台,通过fg恢复前台来ctrl+\ 终止例子:$cathellohello^C$2.系统调用产生kill raise abort后面再解释3.软件条件产生如定时器alarmsleep函数就是这个case4.硬件异常产生非法访问内存,除0(浮点数例外),内存对齐出错(总线错误)。5.命令产生kill命令递达:递送并且到...原创 2022-02-02 16:48:16 · 1340 阅读 · 0 评论 -
Linux系统编程 97 信号的概念和机制
学习笔记信号的概念信号在我们的生活中随处可见,如:古代战争中的摔杯为号;现代战争中的信号弹;体育比赛使用的信号枪...共性:1. 简单2.不能携带大量信息3.满足某个特设条件才发送信号是信息的载体,linux/unix环境下,古老、经典的通信方式,现在依然是主要的通信手段。unix早期就提供了信号机制,但是不可靠,信号可能会丢失。Berkeley和AT&T,都对信号模型做了更改,增加了可靠信号机制,但是彼此不兼容。POSIX.1对可靠信号例程进行了标准化。信号的机制:重原创 2022-02-02 16:10:42 · 1246 阅读 · 0 评论 -
Linux系统编程 87 文件用于进程间通信
学习笔记文件完成进程间通信下面代码不需要你会写$cat fileforprocesscommuncation.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<errno.h>#include<sys/wait.h>#include<fcntl.h>//O_RDWRvoid sys_er原创 2022-01-17 23:18:44 · 226 阅读 · 0 评论 -
Linux系统编程 80 进程间的通信方式
学习笔记在linux环境下,进程地址空间相互独立的,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问。要交换数据,必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据拷贝走,内核提供的这种机制称为进程间的通信。IPC(interprocesscommunication).进程地址空间是独立的。父进程和子进程之间搭建桥梁。这个桥梁就是进程间通信IPC进程间通信的原理:0g-原创 2022-01-16 21:46:48 · 376 阅读 · 0 评论 -
Linux系统编程 85 兄弟进程通信
学习笔记使用创建n个子进程的模型,创建兄弟进程,使用循环因子i标示。注意管道的读写行为。兄:ls弟:wc -l父:等待子进程回收$cat brothercommunication.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<errno.h>#include<sys/wait.h>void s原创 2022-01-16 21:24:58 · 558 阅读 · 0 评论 -
Linux系统编程 81 管道的性质
学习笔记管道的概念:管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据的传递。调用pipe系统函数即可创建一个管道。我们使用mkfifo f1fifo是队列,而管道实为环形队列。$mkfifo fl$lltotal 28drwxrwxr-x 7 ubuntu ubuntu 4096 1月 16 20:39 ./drwxr-xr-x 15 ubuntu ubuntu 4096 1月 14 23:06 ../drwxrwxr-x 2 ubuntu ub...原创 2022-01-16 20:42:41 · 537 阅读 · 0 评论 -
Linux系统编程 13 压缩命令gzip和bzip2
Linux高级编程 13学习笔记压缩命令gzip和bzip2压缩: 1.tar -zcvf 要生成的压缩包名 压缩材料注意这个压缩材料可以使文件 文件夹组合$lsdir1 file1.h file2 newdir$tar cvfz zuhe.tar.gz dir1 file1.h file2dir1/dir1/stdio.hfile1.hfile2gzip 命令gzip命令是真正linux操作系统中进行压缩的dir1 file1.h file2 ...原创 2021-12-02 01:01:10 · 243 阅读 · 0 评论 -
Linux系统编程 12 软件的安装
Linux高级编程 12学习笔记软件的安装5.1 apt-get更新服务器列表sudo apt-get install soft-nameapt-get可以想象成安装工具软件源的概念ubuntu服务器安装包就是在网上的ubuntu服务器(国外)提供中国和国外之间有墙国内有中转站的角色,aliyun wangyi sohu他们提供一些国内的服务器他们将国外的安装软件下载到自己的服务器上这个时候,执行sudo apt-get install soft-name就是.原创 2021-12-01 08:58:12 · 136 阅读 · 0 评论 -
Linux系统编程 10 根据内容检索 grep
Linux高级编程 10学习笔记根据内容检索find的是以文件检索grep -r 'copy' ./-r是递归,也会到子目录去找8.2 ps命令监控后台进程的工作情况-A 显示所有程序-e -A相同-u 查看用户所有者及一些详细信息-x 显示没有控制终端的进程$ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 1.2 0.0 34...原创 2021-11-30 23:59:53 · 70 阅读 · 0 评论 -
Linux系统编程 9 find命令 2
Linux高级编程 9学习笔记find命令 2find /usr/ -name "*tmp" -exec ls -l {} \;搜索到的结果去执行某个操作{} 代表 find /usr/ -name "*tmp"部分 结果集放在{}中;代表语句结束\表示转义字符1.转特殊2.转本义 这里面转本义-exec:将find的搜索的结果集执行某一指定命令$find ./ -type f -exec ls -l {} \;-rwxrwxrwx 1 root root 32151 Nov .原创 2021-11-30 08:54:04 · 266 阅读 · 0 评论 -
Linux系统编程 6 whoami chmod chown
Linux高级编程 6学习笔记whoami 查看当前的用户chmod 修改文件的属性chmod 【who】 {+|-|=} 【mode】 文件名u表示用户g表示组o表示其他用户a表示allmoderwxchmod u+x file数字代替发r :4w :2x :1chmod 741 file3.3 chown修改相关文件的所有者和所属组-rw-rw-r-- 1 ubuntu ubuntu 83 Nov 29 22:04 file2在当前用户..原创 2021-11-30 01:16:05 · 327 阅读 · 0 评论 -
Linux系统编程 5
Linux高级编程 5学习笔记软连接 相当于windows下的快捷方式ln -s 源文件 目标文件$lsdir1 file1$ln -s file1 filesoft$lsdir1 file1 filesoft$ls -l filesoftlrwxrwxrwx 1 ubuntu ubuntu 5 Nov 29 21:33 filesoft -> file1这里面的5字节为文件的访问路径把软链接拷贝到其他目录如果使用相对路径的,有可能不能用为了实现任意搬移,源...原创 2021-11-29 22:16:05 · 71 阅读 · 0 评论 -
Linux系统编程 4
Linux高级编程 4视频为黑马程序员 学习笔记2.13 cat1)查看文件内容2)读终端回显cat 回车hellohello (输出)tac hello.ctac file 倒着显示从最后的日志开始看cat -n file-n 显示行号2.14 more 全屏幕显示,按页显示空格 翻一页b 查看上一屏的内容回车 一行q 退出2.15 less 全屏幕显示,按页显示(支持键盘pgup\pgdn)空格 翻一页b 查看上一屏的...原创 2021-11-29 01:03:16 · 310 阅读 · 0 评论 -
Linux系统编程 3
Linux高级编程 3学习笔记2.2.1相对路径和绝对路径绝对路径从/目录开始描述的路径为绝对路径,如:cd /homecd /usr相对路径从当前位置开始秒速的路径为相对路径ubuntu@ubuntu:~$ pwd/home/ubuntucd 直接回车 就是当前用户的主目录. 当前目录.. 当前目录的上一级目录cd - 返回上一个目录cd ~ 回到家目录目录是倒树状的目录结构2.3ls 命令list单词的缩写ls -l 详细...原创 2021-11-28 21:03:09 · 54 阅读 · 0 评论 -
1.导论 学习笔记 操作系统及Linux实现
1.什么是计算机系统 层次的边界:接口硬件与硬件的接口 USB之类软件与硬件的接口 指令集软件与软件的接口 API虚拟机的概念用户通过app在通过操作系统,能够达到使用硬件的目的。操作系统能做什么?操作系统的定义2.计算机系统的组成操作系统存在disk上!(1)硬盘如何读写盘片数据是一个双面盘扇区是磁道上的一端圆弧操作系统如何来接管计算机...原创 2021-11-22 22:56:11 · 45 阅读 · 0 评论 -
Linux系统编程 82 管道的基本用法
学习笔记pipe函数用于创建并打开管道管道有两个口。#include <unistd.h>int pipe(int pipefd[2]);参数1:pipefd[0] :读端pipefd[1] :写端返回值:成功:0失败:-1 errno管道的写端: 是指进程写到管的的端口管道的读端: 是指进程从管道读取的的端口管道的读写端个人感觉是站在进程角度来描述。父进程创建管道的时候,相当于打开一个读端,一个写端父进程创建子进程的时候,父子进程共享文件描述符。子原创 2022-01-14 23:14:12 · 575 阅读 · 0 评论 -
Linux系统编程 84 父子进程通信
学习笔记$lsmakefile mypipe mypipe.c$ls |wc -l3父进程实现ls子进程实现wc -l利用wc指令我们可以计算文件的Byte数、字数、或是列数.dup2execpipels 原来输出到屏幕,现在要把它输出到管道的写端 dup2(fd[1],STDOUT_FILENO);??dup2不是很熟,需要在学习下!wc -l 将结果写到屏幕$wc -lnihaldfsdfsdfsdfwef4可以看出来:$wc -l 命令 ..原创 2022-01-14 22:35:11 · 488 阅读 · 0 评论 -
Linux系统编程 83 管道读写行为
学习笔记APUE这本书内容读管道1.管道中有数据,read返回实际读到的字节数2.管道没有数据:1)判断管道的写端是否被全部关闭,全部关闭,read返回为02)管道的写端没有全部被关闭,read阻塞等待。(不久的将来,可能有数据传达,此时会让出cpu)写管道1.管道读端全部被关闭,进程异常终止(也可以使用捕捉SIGPIPE信号,使进程不终止)2.管道读端没有全部被关闭:1)管道已满,write阻塞2)管道未满,write将数据写入,并返回实际写入的字节数。程序: 父进程一上来就跑原创 2022-01-14 20:58:16 · 462 阅读 · 0 评论 -
Linux系统编程 75 -wait回收子进程
学习笔记面试经常问到什么是僵尸进程,孤儿进程, 守护进程守护进程后面再讲。父进程回收子进程PCB,如何回收子进程资源?通过wait 函数和 waitpid 函数来处理wait 函数每一进程结束之后,都会在内核残留PCB。PCB 残留的目的是为了方便获取它的终止状态。父进程调用wait 函数可以回收子进程终止信息,该函数有三个功能:1.阻塞等待子进程退出 表示调用函数之后,一直等待子进程退出,而且是死等。2.回收子进程残留资源3.获取子进程结束状态(退出原因)#in..原创 2022-01-07 00:44:13 · 569 阅读 · 0 评论 -
Linux系统编程 74 孤儿进程和僵尸进程
Linux系统编程 74 孤儿进程和僵尸进程学习笔记孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养了孤儿进程。init进程会去接替父进程去管理子进程。主要是进程回收!正常情况下,是父进程对子进程进行回收。查看demo代码$cat orphanprocess.c#include<unistd.h>#include<stdlib.h>#include<stdio.h>int ma.原创 2022-01-07 00:06:16 · 1156 阅读 · 0 评论 -
Linux系统编程 52 文件目录rwx权限差异
学习笔记$ln -s /home/ubuntu/xxxxxeixxx/52quanxian/unlink.c unlink.soft$lltotal 20drwxrwxr-x 2 ubuntu ubuntu 4096 12月 25 10:48 ./drwxrwxr-x 11 ubuntu ubuntu 4096 12月 25 10:47 ../-rwxr--r-- 1 ubuntu ubuntu 178 12月 25 10:47 makefile*-rw-rw-r-- 1 ubu...原创 2021-12-25 15:54:25 · 614 阅读 · 0 评论 -
Linux系统编程 51 -link和unlink隐式回收
学习笔记link 函数用于创建硬链接创建硬链接实际上就是创建新的目录项。#include <unistd.h>int link(const char *oldpath, const char *newpath);第一个参数:源文件的路径第二个参数:要生成硬链接的路径使用link函数实现mv操作1. 先链接一个2. 删除源文件其中涉及的删除操作要用到的函数就是unlink#include <unistd.h>int unlink(const c原创 2021-12-25 10:44:17 · 1777 阅读 · 0 评论 -
Linux系统编程 50 -stat和stat函数 穿透和非穿透
学习笔记修改程序,用于判断文件类型$cat mystat.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <pthread.h>#include <sys/stat.h>int main(int argc, char *argv[]){ struct stat sbuf; i...原创 2021-12-24 22:02:23 · 814 阅读 · 0 评论 -
Linux系统编程 49 -stat函数
学习笔记stat函数获取文件属性,说白了就是从inode中获取#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);第一参数:文件路径 传入参数第二参数:struct stat *statbuf:传出参数,存储文件属性信息返回值:成功是0失败是-1 重点是结构.原创 2021-12-24 00:12:08 · 638 阅读 · 0 评论 -
Linux系统编程 48 目录项和inode
学习笔记inode在硬链接的时候,涉及到inode使用stat filename如果给一个文件创建硬链接的时候,那个和源文件有相同的inode在了Linux下创建硬链接和软链接(也就是符号链接)都是用ln命令,当使用ln命令时加上-s选项就表示创建的连接文件是一个软链接,如果使用ln命令时不带-s选项就表示创建的是一个硬链接。命令的格式则是:ln 原文件 链接文件$cp -r 46lseek/ 47inode$cd 47inode/$lsdict.cp f.c...原创 2021-12-23 23:18:36 · 569 阅读 · 0 评论 -
Linux系统编程 47 传入传出参数
学习笔记ioctrl 函数和嵌入式相关,这边不讲对I/O通道进行管理,控制设备特性(主要应用于设备驱动程序中)传入参数1.指针作为函数参数2.通常有const关键字修饰3.指针指向有效区域,传入参数在函数内部做读操作char *strcpy(char *dest, const char *src);const char *src: 就是传入参数传出参数1.指针作为函数参数2.在函数调用之前,指针指向的空间可以无意义,但必须有效3.在函数内部做写操作4.函数调用结束后,充当函原创 2021-12-23 22:42:24 · 585 阅读 · 0 评论 -
Linux系统编程 46 -lseek函数
学习笔记lseek函数文件偏移以前有接触到fseek 库函数,lseek和它有点类似。#include <sys/types.h>#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);第一个参数:文件描述符第二个参数:偏移量 正负值, 往前往后第三个参数:设置偏移的起始位置 whence: 从何处,从哪里的意思三个值:SEEK_SET :文件的起始位置SEEK_CUR :文件原创 2021-12-23 00:28:44 · 774 阅读 · 0 评论 -
Linux系统编程 45 -fcntl改文件属性
学习笔记fcntl函数前面改变一个已经打开的文件的访问属性(比如阻塞状态变为非阻塞状态),要重新打开以下。fcntl函数可以不重新打开,就直接改变文件的访问属性。int fcntl(int fd, int cmd, ... /* arg */ );第一个参数:文件描述符第二个参数:命令第三个参数变参:根据命令来决定有什么后续的参数重点学习:F_GETFLF_ 相当于命名空间。FL:代表file status flags, 就是文件的状态。 arg 被忽略。所以该命令是用.原创 2021-12-22 22:33:59 · 657 阅读 · 0 评论 -
Linux系统编程 44 阻塞和非阻塞
Linux系统编程 44 阻塞和非阻塞学习笔记了解概念跟他相关的是read和write函数。如果读的是常规的文件,不会涉及到阻塞和非阻塞。1.设备文件2.网络文件/dev/tty --- 终端文件$cat block_readtty.c#include <unistd.h>#include <stdlib.h>#include <stdio.h>int main(void){ char buf[10]; int n;...原创 2021-12-19 23:57:12 · 447 阅读 · 0 评论 -
Linux系统编程 43 文件描述符
gcc 默认生成的可执行文件是a.out文件PCB 进程控制块/进程描述符本质是一个结构体,其中有一个成员是一个指针,指针指向文件描述符表。文件描述符表里面存放的就是文件描述符。本质上文件描述符表存放的是指针。在往下揪的话,实际上是键值对应的映射。fd 返回的就是数组的下标。操作系统不希望你去了解他,不希望你去研究它,所以具体实现细节会对你隐藏。(有点想cpp的信息隐蔽)。一个进程最多能打开1024个文件。文件描述符表还遵循这样一个原理:新打开的文件描述符一定是文件描述...原创 2021-12-19 14:27:58 · 206 阅读 · 0 评论 -
Linux系统编程 42 -系统调用和库函数的比较--预读入缓输出
学习笔记fputc或者read函数完成拷贝,拷贝就是完成向磁盘写东西。由用户空间进入内核空间,借助驱动去驱动磁盘工作。fputc的话,没有办法直接进入内核,应该向下调用write,因为只用系统调用才能进入系统内核空间,进入内核以后,才有办法去调用驱动层,最终驱动硬件工作。如果直接通过write进内核,再去调用驱动,写磁盘,从这种角度看,write似乎比fputc效率更高。使用系统函数read/write完成拷贝的程序如下:$cat read_cmp_getc.c #i..原创 2021-12-18 19:21:23 · 1018 阅读 · 0 评论 -
Linux系统编程 41 -read和write实现copy
Linux系统编程 41 read和write实现cp学习笔记ssize_t read(int fd, void *buf, size_t count);ssize_t中的s表示有符号参数:第一个:文件描述符第二个:存放数据的缓冲区第三个:缓冲区的大小返回值:1.成功的时候,返回实际读到的字节数(0:指示已经到达文件结尾了EOF)2.失败的时候,返回-1,errno会被赋值相应的值。#include <unistd.h>ssize_t write(int fd原创 2021-12-14 23:01:20 · 2416 阅读 · 0 评论 -
Linux系统编程 40 -open函数
Linux系统编程 40 open函数学习笔记函数原型:int open(const char *pathname, init flags);int open(const char *pathname, int flags,mode_t mode);int close(int fd);open 成功的时候,会返回一个整数 失败的时候,会返回-1 pathname : 文件路径flags : 读写权限mode : 用户 用户组 其他用户的权限...原创 2021-12-14 13:24:57 · 3042 阅读 · 0 评论 -
Linux系统编程 39 系统编程阶段前面说的话
Linux系统编程 39 -系统编程阶段前面说的话学习笔记系统调用讲man page的时候说过$man man 1 Executable programs or shell commands 2 System calls (functions provided by the kernel) 3 Library calls (functions within program libraries) 4 Special files ...原创 2021-12-13 12:51:50 · 412 阅读 · 0 评论 -
Linux系统编程 38 -makefile 3个自动变量和模式规则
Linux系统编程 38 -makefile 3个自动变量和模式规则学习笔记自动变量$@在规则命令中,表示目标。要注意:$@只能出现在命令上,不能出现在依赖和目标上。$<1.在规则的命令中,表示第一个依赖条件 (1个)2.如果将该变量应用在模式规则中,它可将依赖条件中的依赖依次取出,套用模式规则 (多个)$^在规则的命令中,表示所有的依赖关系makefile改写为:$cat makefilesrc=$(wildcard ./*.c) #add.c div1.c su原创 2021-12-12 21:49:19 · 234 阅读 · 0 评论