
Linux
文章平均质量分 82
荣世蓥
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
13.5 Linux_网络编程_域名解析
h_aliases:主机的备用名称数组,以NULL结尾h_addrtype:AF_INET或AF_INET6h_length:单位字节。AF_INET时为4,AF_INET6时为16。原创 2024-10-22 15:06:20 · 258 阅读 · 0 评论 -
13.4 Linux_网络编程_套接字属性
socket中可以设置的属性种类很多,比如socke的选项、传输层TCP/UDP的选项、数据链路层的选项。这些选项在不同的层级,这就是选项的级别。原创 2024-10-21 11:31:20 · 527 阅读 · 0 评论 -
13.3 Linux_网络编程_多路复用I/O接入多客户端
返回值:成功返回有数据的文件描述符,失败返回-1nfds:最大的文件描述符,值为readfds,writefds,exceptfds中最大的文件描述符+1readfds:可读集合,常用writefds:可写集合,不常用exceptfds:异常集合,不常用timeout:超时时间。NULL永久阻塞,0非阻塞fd_set就是一个整型数,每一个bit位代表一个文件描述符fd。当fd可操作时,对应的位就会自动置1,读取之后需要手动清零。原创 2024-10-20 15:55:11 · 579 阅读 · 0 评论 -
13.2 Linux_网络编程_UNIX域套接字
UNIX域套接字是使用套接字进行本地通信,TCP/UDP是使用套接字进行网络通信。UNIX域套接字也有域流式套接字和域数据报套接字,这两种形式域TCP/UDP的含义类似,使用步骤也完全一致。原创 2024-10-18 11:08:12 · 418 阅读 · 0 评论 -
13.1 Linux_网络编程_TCP/UDP
socket处在应用层与内核之间。在应用层中实现的是与应用相关的代码,在内核中实现的是网络通信相关的代码。在OSI结构中,应用层就是OSI的应用层、表示层、会话层,内核就是运输层、网络层、数据链路层、物理层。三元组指的是IP地址、端口号、协议。该数据通过bind函数进行绑定。IP地址:标识计算机,找到与网络中的哪一个计算机进行通信。端口号:标识进程,找到与计算机中哪一个进程进行通信。协议:指定数据以什么样的方式进行传递。主要指TCP、UDP。原创 2024-10-14 21:22:37 · 1168 阅读 · 0 评论 -
12.5 Linux_进程间通信_信号灯
信号灯也称为信号量,代表的是一类资源,其值表示系统中该资源的数量。主要用途是实现进程、线程的同步。原创 2024-10-10 11:25:30 · 870 阅读 · 0 评论 -
12.4 Linux_进程间通信_消息队列
消息队列是用链式队列的数据结构来实现的进程间通信方式,数据具有先入先出的特点。消息队列由ID来进行标识,每一个消息队列的ID都是唯一的。原创 2024-10-09 16:24:21 · 459 阅读 · 0 评论 -
12.3 Linux_进程间通信_信号机制
返回值:成功返回原信号处理函数,失败返回SIG_ERRsignum:改变哪一个信号的行为handler:信号行为改变成什么,SIG_DFL代表缺省,SIG_IGN代表忽略while(1);return 0;原创 2024-10-08 11:28:25 · 879 阅读 · 0 评论 -
12.2 Linux_进程间通信_共享内存
共享内存又叫内存映射,可以通过mmap()映射普通文件。实际上就是将磁盘中的一个文件映射到内存的一个缓冲区中去,这样进程就可以直接将这块空间当作普通内存来访问,不需要再使用I/O中的read/write去访问这个文件。映射之后,内存中读写数据就是在文件中读写数据。原创 2024-10-09 12:40:52 · 1184 阅读 · 0 评论 -
12.1 Linux_进程间通信_管道
无名管道就是在内核中开辟了一块内存,进程1和进程2都可以访问这一块空间,从而实现通信。当无名管道被创建时,父进程fd[0]指向管道的读端,fd[1]指向管道的写端。fork创建子进程后,子进程也有一对fd[0]指向管道的读端,fd[1]指向管道的写端。具体结构如下:之后可以使一个进程关闭读端,另一个进程关闭写端。关闭后的具体结构如下:原创 2024-10-05 10:16:35 · 1112 阅读 · 0 评论 -
11.5 Linux_线程_线程池
线程池就是线程的集合,里面存放了一系列的线程。线程池使用于需要大量创建和销毁线程的情况,使用线程池比单个线程的创建和销毁速度要快。原创 2024-10-04 18:04:20 · 494 阅读 · 0 评论 -
11.4 Linux_线程_条件变量
条件变量和互斥量配合使用,主要应用于生产者和消费者问题。这种问题也是一种临界资源的问题,但与互斥量一文中 "写文件" 这种资源不同。文件是一直存在的临界资源,而生产者的资源不是一直存在,资源的产生需要一些条件。条件变量实现了在等待生产者时,消费者进入休眠状态,提高运行效率。1、初始化互斥量、条件变量2.1 生产者:加锁互斥量->生产资源->发送信号给条件变量->解锁互斥量2.2 消费者:加锁互斥量->无资源时等待条件变量->消费资源->解锁互斥量。原创 2024-10-03 20:17:07 · 538 阅读 · 0 评论 -
11.3 Linux_线程_读写锁
读写锁是主要为了防止读文件与写文件冲突。如果A线程在读文件,此时B线程写入文件,破坏了原文件的内容,那么A线程读到的数据就是错误的,这就需要读写锁来禁止B线程写入文件。写者使用写锁,只有当读者和写者都不存在时,才可获得锁,否则进入阻塞状态。读者使用读锁,当写者不存在时,可以获得锁,否则进入阻塞状态。。不论加不加读写锁,文件流指针都只有一个。线程1读了2行之后,线程2的读取是从第3行开始。因此在每个线程中需要考虑当前流指针的位置。原创 2024-10-03 10:15:16 · 403 阅读 · 0 评论 -
11.2 Linux_线程_同步与互斥
同一时刻只允许一个任务访问的共享资源。比如写入文件,就是一个临界资源,当写入文件时,不允许两个任务同时往里面写。如果A写入abc,B写入def,同时写的情况下文件中的值不一定为abcdef,这时就需要在某一时刻只允许A写入abc,在另一时刻只允许B写入def。原创 2024-10-03 09:25:19 · 252 阅读 · 0 评论 -
11.1 Linux_线程_线程相关函数
可执行的指令、静态数据、文件描述符、当前工作目录、用户ID、用户组ID线程ID、程序计数器PC和相关寄存器、堆栈、错误号、优先级、执行状态和属性gcc -o 如果主线程main退出,则其他线程也被终止。因为main退出,进程的空间被释放,所有线程的空间也不复存在。ps -eLf | grep原创 2024-10-02 19:49:49 · 1182 阅读 · 0 评论 -
10.3 Linux_进程_创建守护进程
守护进程又叫精灵进程,是一个生存期较长的进程,通常并且某种任务或等待处理某些发生的事件。它是一个在的这使得守护进程不受终端的信息影响(比如ctrl c中断程序),同时守护进行也不能够向终端发送任何信息(标准输入、标准输出、标准错误被关闭)。创建子进程,父进程退出后,通过ps -elf | grep xxx 查询,发现父进程的进程号不是1问题如下图:原因:这是因为init有许多事情做,在init中创建了一个子进程专门用来收留孤儿进程。原创 2024-10-01 10:35:30 · 606 阅读 · 0 评论 -
10.2 Linux_进程_进程相关函数
返回值:失败返回-1,成功返回两次,子进程获得0(系统分配),父进程获得子进程的pid注意:fork创建子进程,实际上就是将父进程复制一遍作为子进程,但子进程只执行fork之后的代码,不执行fork之前的代码。这里的"复制"代表了父子进程的空间是独立的,互不影响。如果父进程先结束,那么子进程变成孤儿进程,最终被init进程收养,并且子进程变为后台进程。如果子进程先结束,但父进程没有回收子进程,那么子进程变成僵尸进程。原创 2024-10-01 09:07:33 · 1478 阅读 · 0 评论 -
10.1 Linux_进程_进程基本知识
程序是存放在磁盘上的文件,是静态的。进程就是跑起来的程序,是动态的。它包括创建、调度、执行、消亡。是一个程序所分配资源的总称。进程控制块的作用是管理进程的属性,存放了进程表示PID、进程用户、进程状态、优先级、文件描述符表等信息。等待态:进程在等待一个事件的发生或某种系统资源。分为可中断和不可中断两种形式。停止态:进程被中止,收到信号后可继续运行。类似FreeRTOS中的挂起态。死亡态:已终止的进程,但pcb没有被释放。运行态:进程正在运行,或者准备运行。原创 2024-09-26 11:33:28 · 282 阅读 · 0 评论 -
9.6 Linux_I/O_IO模型
用户进程中的一个完整I/O分为 "用户进程空间->内核空间->设备空间(磁盘、网卡)" 这两个阶段。I/O可以分为内存I/O、网络I/O、磁盘I/O1、对于线程的请求调用,同步与异步区别在于是否要等这个比如read函数,它就是只有读完了数据,存入到了buf中,才会执行下一步,这就是同步比如aio_read函数,它就是只发送请求数据,不论是否读完,它都会执行下一步,这就是异步。2、对于多线程,同步与异步区别在于是否要、是否要。原创 2024-10-18 15:12:50 · 598 阅读 · 0 评论 -
9.5 Linux_I/O_静态库与动态库
库是一个二进制文件,包含的代码可用被程序调用。常见的库有标准C库、数学库、线程库。原创 2024-09-26 09:39:57 · 858 阅读 · 0 评论 -
9.4 Linux_I/O_访问目录、文件属性
返回值:成功返回指向打开的目录文件的结构体指针(流指针),失败返回NULLname:目录的路径fd:文件描述符返回值:成功返回0,失败返回EOFdirp:指向目录的流指针。原创 2024-09-25 18:39:04 · 465 阅读 · 0 评论 -
9.3 Linux_I/O_文件I/O相关函数
返回值:成功返回文件描述符,失败返回EOFpathname:文件路径flags:标志,其中O_RDONLY、O_WRONLY、O_RDWR三个互斥,其余可用 ' | ' 链接mode:表示文件的权限,是可读可写可执行,以八进制表示。实际权限 = mode & (~umask)原创 2024-09-24 15:14:40 · 670 阅读 · 0 评论 -
9.2 Linux_I/O_标准I/O相关函数
文件打开就是判断这个文件资源可不可以被占用,如果可以,就能够打开成功,否则打开失败文件关闭就是释放文件资源。原创 2024-09-24 11:42:44 · 902 阅读 · 0 评论 -
9.1 Linux_I/O_基本知识
尽管我们可以直接通过系统调用来实现功能,但每个操作系统提供的接口不一样,所以在移植到其他操作系统时,每次都需要重新编写代码实现同样的功能;而使用库函数后,因为库函数的接口是一样的,因此移植之后就不需要对代码进行修改(库函数是已经写好的代码)。行缓冲:当输入/输出中出现了换行符时,就把缓冲区中的数据发给磁盘,这时缓冲区不一定写满。系统调用就是操作系统给我们提供的接口,库函数是在系统调用之上封装的函数。无缓冲:直接与磁盘进行数据交互,直接写磁盘,直接读磁盘。标准I/O通过缓冲机制减少系统调用,实现更高的效率。原创 2024-09-21 10:54:12 · 465 阅读 · 0 评论 -
8.Linux_Makefile
(变量名)、${变量名}这两种方式的含义是一样的如果想输出$符号,应该输入$$变量赋值有4个符号:=、+=、?=、:=、1、" = ":是最基本的赋值方式,与在文中位置无关,系统自动推导将最终的赋值作为该变量的值。2、" += ":追加赋值,旧值保持不变,将新值黏贴到旧值后面3、"?= ":当某变量前面已经定义赋值过,则不执行本次定义赋值,否则执行本次赋值4、" := ":是覆盖式赋值,假如某变量在前面已经定义赋值过,则将本次赋值作为最新的变量值格式:make <变量名>=<值>原创 2024-08-27 10:11:35 · 1158 阅读 · 0 评论 -
7.Linux_GCC与GDB
gcc可以不从-E开始执行,可以直接从汇编开始:gcc -c -o ,之后再进行链接。分文件处理指令:gcc -o -I 指令:gcc -o -D =2、查看代码内容:list,简写l。指令:gcc - E -o 指令:gcc -S -o 指令:gcc -c -o 指令:gcc -o原创 2024-08-25 15:08:21 · 1221 阅读 · 0 评论 -
6.Linux_服务器搭建
nfs(Network File System)即网络文件系统,其基于UDP/IP使用nfs能够在不同计算机之间通过网络进行文件共享,能使使用者访问网络上其它计算机中的文件就像在访问自己的计算机一样。网络文件系统:文件系统不像/home那样存在于本机,而是存在于网络中像自己的文件系统一样访问:访问文件的指令、方法完全一样提供透明文件访问以及文件传输;容易扩充新的资源或软件,不需要改变现有的工作环境;高性能,可灵活配置。原创 2024-08-22 11:42:49 · 1183 阅读 · 0 评论 -
5.Linux_Shell编程
传参:bash (参数用空格隔开)第一个参数:$0,值为shell脚本名第n个参数:$n,$(n)。n为多位数时用()。如:$1,$(10)总参数个数:$#。$0不进行总参数个数的统计全部传入的参数值:$@(全部参数当作一个整体)或者$*(每个参数分开是一个值)上一条指令执行的结果:$?(常用作test指令返回值的判断,$?值:test真返回0)当前进程的id号:$$补充:$@与$*的区别验证。原创 2024-08-21 17:42:43 · 1586 阅读 · 0 评论 -
4.Linux_Shell命令
重定向就是改变默认的标准输入/输出目标,重新定向到新的目标。原创 2024-08-20 11:12:17 · 1281 阅读 · 0 评论 -
3.Linux_vi编辑器
指令:vi 文件名若文件不存在,则新建一个文件;若文件存在,则打开这个文件。原创 2024-08-01 17:56:11 · 874 阅读 · 0 评论 -
2.Linux_基础
Linux的文件结构是一个倒的树状图,具体结构如下:bin:存放二进制文件boot:存放系统启动文件dev:存放设备文件etc:存放系统管理时要用到的各种配置文件和子目录lib:存放系统动态连接共享库home:存放普通用户的主目录root:存放超级用户的主目录。原创 2024-07-28 12:01:27 · 979 阅读 · 0 评论 -
1.Linux_常识
二进制软件包(deb):直接拿来用的可执行文件源码包(deb-src):功能实现的源码,需要编译生成可执行文件后才能使用使用 " file + 文件名 " 查看文件类型:命名规则:软件包名称_软件版本-修订版本_体系架构.deb如:sogoupinyin_4.0.1.2800_x86_64.debsogoupinyin:软件包名称4.0.1.2800:软件版本x86_64:体系架构.deb:软件包后缀。原创 2024-08-17 22:08:17 · 3407 阅读 · 1 评论