![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 83
vegetablesssss
一只菜鸟。
展开
-
Linux学习总结(二十三)shell编程
shell历史 shell的作用是解释执行用户的命令,用户输入一条命令,shell就解释执行一条,这种方式称为交互式(Interactive),shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个shell脚本(Script),其中有很多条命令,让shell一次把这些命令执行完,而不必一条一条的敲命令。shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到shell提示符下执行。 由于历史原因,UNIX系统上有很多种shell:sh(Bou原创 2021-03-24 18:01:59 · 498 阅读 · 1 评论 -
Linux学习总结(二十二)socket IPC(本地套接字domain)
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket,虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX Domain Soc原创 2021-03-18 10:14:21 · 311 阅读 · 0 评论 -
Linux学习总结(二十一)UDP
UDP服务器 传输层主要应用的协议模型有两种,一种是TCP协议,另一种则是UDP协议。TCP协议在网络通信中占主导地位,绝大多数的网络通信借助TCP协议完成数据传输,但UDP也是网络通信中不可或缺的重要通信手段。 相较于TCP而言,UDP通信的形式更像是发短信。不需要在数据传输之前建立、维护连接。只专心获取数据就好,省去了三次握手的过程,通信速度可以大大提高,但与之伴随的通信的稳定性和正确率便得不到保证,因此,我们称UDP为“无连接的不可靠报文传递”。 那么与我们熟知的TCP相比,UDP有哪些优原创 2021-03-16 10:12:07 · 142 阅读 · 1 评论 -
Linux学习总结(二十)高并发服务器
多进程并发服务器使用多进程并发服务器时要考虑以下几点:1.父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)2.系统内创建进程个数(与内存大小相关)3.进程创建过多是否降低整体服务性能(进程调度)server#include <stdio.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.原创 2021-02-25 09:59:25 · 344 阅读 · 1 评论 -
Linux学习总结(十九)Socket编程
套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型,本质为内核借助缓冲区形成的伪文件。 既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字,与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致,区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。 套接字的内核实现较为复杂,不宜在学习初期深入学习。 在TCP/IP协议中,IP地址唯一标识一台主机,端口号唯一标识一个原创 2021-02-05 15:54:19 · 1005 阅读 · 1 评论 -
Linux学习总结(十八)网络基础
协议的概念什么是协议从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、b双方欲传输文件,规定:第一次,传输文件名,接收方收到文件名,应答OK给传输方;第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;第三次,传输文件内容,同样,接收方接收数据完成后应答OK表示文件内容接收成功。 由此,无论A、B之间传递何种文件,都是通过三次数据传输来完成,A、B之间形成了一个最简单的数据传输规则,双方都按此规则发送、接收数据,A、B之间达成的这个相互遵守的规则即为协议原创 2021-02-02 11:00:05 · 238 阅读 · 1 评论 -
Linux学习总结(十七)线程同步
线程同步 同步即协同步调,按预定的先后次序运行。 线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回,同时其他线程为保证数据一致性,不能调用该功能。举例1: 银行存款 5000。柜台,折:取3000;提款机,卡:取 3000。剩余:2000举例2: 内存中100字节,线程T1欲填入全1, 线程T2欲填入全0。但如果T1执行了50个字节失去cpu,T2执行,会将T1写过的内容覆盖。当T1再次获得cpu继续 从失去cpu的位置向后写入1,当执行结束,内存中的100字节,既不是全原创 2021-01-27 12:21:20 · 308 阅读 · 3 评论 -
Linux学习总结(十六)线程
线程相关概念什么是线程LWP:light weight process轻量级进程,本质仍然是进程(Linux环境下)进程:有独立的地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享)区别:在于是否共享地址空间,独居的就是进程,合租的就是线程。在Linux下,线程是最小的执行单位,进程是最小资源分配单位,可看成是只有一个线程的进程。Linux内核线程实现原理类unix系统中,早期是没有线程概念的,80年代才引入,借助进程机制实现了线程的概念,因此在这类系统中,进程和线程关系密原创 2021-01-20 10:51:39 · 171 阅读 · 0 评论 -
Linux学习总结(十五)进程组,会话,守护进程
进程组进程组,也称之为作业,BSD于1980年前后向unix中增加的一个新特性,代表一个或多个进程的集合,每个进程都属于一个进程组,在waitpid函数和kill函数的参数中都曾使用导,操作系统设计的进程组的概念,是为了简化对多个进程的管理。当父进程创建子进程的时候,默认子进程与父进程属于同一个进程组,进程组ID=第一个进程ID(组长进程),所以,组长进程ID等于其进程组ID可以使用kill -SIGKILL -进程组ID(负的)来将整个进程组内的进程全部杀死。组长进程可以创建一个进程组,创建该进程原创 2021-01-15 12:26:00 · 199 阅读 · 0 评论 -
Linux学习总结(十四)IPC方法-信号
系统中的信号使用kill -l命令产看当前系统中可使用的信号:每个进程都可以收到上面这些信号,这些信号都是由内核负责返送,内核负责处理。特别强调,9号和19号信号不允许忽略和捕捉和阻塞,只能执行默认动作信号的产生和处理产生信号:1.按键产生,如:ctrl+c、ctrl+z、ctrl+2.系统调用产生,如:kill、raise、abort3.软件条件产生,如:定时器alarm4.硬件异常产生,如:非法访问内存(段错误)、除0(浮点数例外)递达:递送并且到达进程未决:产生和递达之间的状态原创 2021-01-10 13:12:57 · 268 阅读 · 2 评论 -
Linux学习总结(十三)进程练习:大文件多进程和多线程拷贝
实现文件多进程拷贝 假设有一个超大文件,需对其完成拷贝工作。为提高效率,可采用多进程并行拷贝的方法来实现。假设文件大小为len,共有n个进程对该文件进行拷贝。那每个进程拷贝的字节数应为len/n。但未必一定能整除,我们可以选择让最后一个进程负责剩余部分拷贝工作。可使用len % (len/n)将剩余部分大小求出。 为降低实现复杂度,可选用mmap来实现源、目标文件的映射,通过指针操作内存地原创 2021-01-08 10:27:41 · 409 阅读 · 0 评论 -
Linux学习总结(十二)IPC方法-共享内存
使用普通文件通信使用普通文件也可以进行IPC,依据是fork后,父子进程共享文件描述符,也就是共享打开的文件。/* *父子进程共享打开的文件描述符------使用文件完成进程间通信. */#include <stdio.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <fcntl.h>#include <sys/wait.h>原创 2021-01-07 11:58:45 · 204 阅读 · 1 评论 -
Linux学习总结(十一)IPC方法-命名管道FIFO
FIFO FIFO常被成为命名管道,以区分管道(pipe),管道(pipe)只能用于“有血缘关系”的进程间,但通过FIFO,不相关的进程也能交换数据。 FIFO是Linux基础文件类型中的一种,但是,FIFO文件在磁盘上没有数据块,仅仅用来标识内核中一条通道,各进程可以打开这个文件进行read/write,实际上是在读写内核通道,这样就实现了进程间通信。使用方式:命令:mkfifo 管道名库函数:int mk原创 2021-01-06 15:53:03 · 96 阅读 · 0 评论 -
Linux学习总结(十)IPC方法-管道PIPE
IPC方法Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间,任何一个进程的全局变量再另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制成为进程间通信(IPC)。在进程间完成数据传递需要借助操作系统提供特殊的方法,如:文件、管道、信号、共享内存、套接字、命名管道等。随着计算机的蓬勃发展,一些方法由于自身设计缺陷被淘汰或者弃用。现今常用的进程间原创 2021-01-05 16:43:39 · 248 阅读 · 1 评论 -
Linux学习总结(九)回收子进程
孤儿进程父进程先于子进程结束,则子进程成为孤儿进程,子进程得父进程成为init进程,称为init进程领养孤儿进程。僵尸进程进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。特别注意:僵尸进程是不能使用kill命令清除掉得,因为kill命令只是用来中止进程的,而僵尸进程已经终止。wait函数一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着原创 2021-01-01 20:45:11 · 197 阅读 · 0 评论 -
Linux学习总结(八)fork函数循环创建n个子进程
fork函数fork函数用来创建一个子进程。pid_t fork(void);失败返回-1,成功返回:父进程返回子进程的ID(非负)子进程返回0pid_t类型表示进程ID,但为了标识-1,它是有符号整数。(0不是有效进程ID,init最小,为1)注意返回值,不是fork函数能返回两个值,而是fork后,fork函数变为两个,父子需各自返回一个循环创建n个子进程#include <stdio.h>#include <stdlib.h>#include <原创 2020-12-29 17:27:21 · 962 阅读 · 0 评论 -
Linux学习总结(七)库函数和系统函数的关系
C标准库函数和Linux系统函数的联系C标准IO函数和Linux系统IO函数联系结论从上面两张图可以看出,C标准库函数属于上层调用,最终还是通过调用Linux系统函数来实现,因此使用标准库函数编写的程序可以跨平台,而底层调用是与平台相关,Linux调用属于Linux的系统函数,windows调用windows的系统函数。...原创 2020-12-28 19:19:00 · 277 阅读 · 0 评论 -
Linux学习总结(六)静态库和动态库的制作
静态库制作命名格式:1.以lib开头2.静态库名3.a结尾例如:libsort.a优点:寻址方便,速度快库被打包到可执行程序中,直接发布可执行程序即可使用缺点:静态库的代码在编译过程中已经被载入可执行程序,因此体积较大如果静态函数库改变了,那么你的程序必须重新编译使用场合:在核心程序上使用,保证速度,可忽视空间主流应用于80、90年代,现在很少用制作1、得到*.o:gcc a.c b.c c.c -c2、得到静态库libmytest.aar rc原创 2020-12-27 11:52:32 · 136 阅读 · 1 评论 -
Linux学习总结(五)ssh服务器搭建
安装sudo apt-get install openssh-server远程登录ssh 用户名@IP确认连接的时候一定要写yes/no例如:服务器管理员通过ssh远程登录外地主机,进行维护退出登录logoutscp命令scp 相当于super copy使用该命令的前提条件是目标主机已经成功安装openssh-server使用格式scp -r 目标用户名@目标主机IP地址:...原创 2020-12-26 19:27:44 · 176 阅读 · 0 评论 -
Linux学习总结(四)nfs服务器搭建
nfs即net file system,网络文件系统,它允许网络中的计算机之间通过tcp/ip网络共享资源。安装sudo apt-getinstall nfs-kernel-server配置如果想创建一个共享出去的目录,如:/home/gt打开配置文件:sudo vi /etc/exports写入共享目录的绝对路径以及对应的权限,例如:/home/gt(ro,sync,no_root_squash)ro:只读权限rw:读写权限sync:资料同步写入到内存与硬盘当中async:资料会先原创 2020-12-26 17:42:02 · 269 阅读 · 0 评论 -
Linux学习总结(三)ftp服务器搭建
安装sudo apt-get install vsftpd该命令客户端和服务器都会被安装配置服务器端进行配置,配置给客户端使用修改配置文件:/etc/vsftpd.confwrite_enable=YES //是否拥有写权限anon_root=/home/gt/ftp //匿名用户ftp根目录anonymous_enable=YES //是否允许使用匿名用户anon_upload_enable=YES //是否允许匿名用户上传权限anon_mkdir_wri原创 2020-12-26 16:59:02 · 376 阅读 · 0 评论 -
Linux学习总结(二)压缩和进程相关命令
tar + 参数(jcvf) + 压缩包名字.tar.bz2 + 原材料(要打包压缩的文件或目录)tar + 参数(zcvf) + 压缩包名字.tar.gz + 原材料(要打包压缩的文件或目录)tar + 参数(jxvf) + 已有的压缩包(test.tar.bz2)tar + 参数(zxvf) + 已有的压缩包(test.tar.gz)tar + 参数(Jxvf) + 已有的压缩包(test.tar.xz)对显示的进程进行过滤:查看与bash相关进程命令。其中信号名称可选,不写默认是15号信号。原创 2020-12-26 15:33:05 · 179 阅读 · 2 评论 -
Linux学习总结(一)文件和目录
Linux 系统目录结构登录系统后,在当前命令窗口下输入命令: ls / 你会看到如下图所示:树状目录结构:以下是对这些目录的解释:1./bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev :dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。/etc:这个目录用来存原创 2020-12-26 13:14:18 · 259 阅读 · 1 评论 -
Linux服务器开发学习资料
作为一名C++程序员,不会Linux实在是说不过去,最近看了一些Linux学习资料,感觉还不错,特来分享给大家。原创 2020-12-26 11:56:29 · 156 阅读 · 0 评论