Linux
文章平均质量分 87
pythoncjavac++
这个作者很懒,什么都没留下…
展开
-
Linux网络编程套接字
/ 网络地址IP为_ip,因为我们一般是不bind固定ip的,所以这里如果没有具体IP就使用INADDR_ANY,这个宏表示本地的任意IP地址,因为服务器可能有多个网卡,每个网卡也可能绑定多个IP 地址, 这样设置可以在所有的IP地址上监听,直到与某个客户端建立了连接时才确定下来到底用哪个IP 地址。常见的套接字有三种,分别为,域间socket,原始socket,网络socket,理论上,是三种应用场景,对应的应该是三套接口,但是不想设计太多接口,就将所有的接口进行统一。原创 2023-04-14 17:05:28 · 506 阅读 · 0 评论 -
Linux高级IO
如果服务端写的代码是阻塞式的read, 并且一次只 read 1k 数据的话(read不能保证一次就把所有的数据都读出来,参考 man 手册的说明, 可能被信号打断), 剩下的9k数据就会待在缓冲区中.例如, 典型的一个需要处理上万个客户端的服务器, 例如各种互联网APP的入口服务器, 这样的服务器就很适合epoll.epoll的高性能, 是有一定的特定场景的. 如果场景选择的不适宜, epoll的性能可能适得其反.信号驱动IO: 内核将数据准备好的时候, 使用SIGIO信号通知应用程序进行IO操作。原创 2023-06-25 09:12:42 · 132 阅读 · 0 评论 -
Linux进程概念
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系,截至目前,我们所认识的计算机,都是有一个个的硬件组件组成。每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。所有运行在系统里的进程都以task_struct链表的形式存在内核里。任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。进程的信息可以通过 /proc 系统文件夹查看。原创 2023-07-04 17:03:06 · 109 阅读 · 0 评论 -
Linux网络基础二
为什么需要协议解析以及添加报文:因为tcp是字节流式的,收到的数据可能并不完整,就是并不是一个数据,有可能是半个,也有可能是一个半,因为send/write这类接口是把数据写到缓冲区,其他的事情都归Tcp管,因为TCP是字节流式的,所以发送次数和接收次数,没有关系,不像udp发多少次就接受多少次。5.在命令行中,同时用管道启动多个进程,多个进程是兄弟关系,父进程都是bash -→>可以用匿名管道来进行通信,而同时被创建的多个进程可以成为一个进程组的概念,组长一般是第一个进程。(序列化和反序列化)原创 2023-04-30 13:29:18 · 909 阅读 · 0 评论 -
Linux网络基础
通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,但是它既复杂又不实用,实际中应用的是TCP/IP四层模型。5.经过封装和分用的过程,对于网络交互的接收和发送两方,每一层所看到的数据都是一样的,注:这里指的是IP层之上,因为IP层下的数据传输可能是在不同的网段传输,协议不同对应的报头数据也就不同。4.对于跨网段的数据传输,由于链路层的不同网段存在不同的协议,为了保证数据传输的通畅,此时就需要路由器将数据包针对不同协议进行协议的替换,即数据报头的更换。在这个例子中, 我们的协议只有两层;原创 2023-03-02 15:37:47 · 320 阅读 · 0 评论 -
Linux文件系统与inode、软硬链接
虽然磁盘的基本单位是扇区(512字节),但操作系统(文件系统)和磁盘进行IO的基本单位是:4KB(8*512byte),此4KB被称为block大小,所以磁盘被称为块设备。为什么不用512字节为单位作为IO的基本单位呢?1.因为512太小了,有可能会导致多次IO,进而导致效率的降低!2.硬件与软件的IO访问大小不同,可以将硬件和软件(OS)之间的关系解耦合。比如磁盘的规格后序会不断变化,但是不影响系统的IO访问大小。原创 2023-02-17 17:25:37 · 99 阅读 · 0 评论 -
Linux进程信号产生以及捕捉
生活中,有哪些信号相关的场景呢,比如:红绿灯,闹钟,转向灯等等。1.这里我们要知道,你为什么认识这些信号呢,记住了对应场景下的信号+后续是有”动作“要你执行的。原创 2023-02-15 13:36:33 · 950 阅读 · 0 评论 -
Linux进程间通信(system V共享内存)
shmflg:有这两个参数IPC_CREAT and IPC_EXCL,单独IPC_CREAT,如果创建共享内存,如果底层已经存在,获取之,并且返回,如果不存在,创建之,并返回,单独使用IPC_EXCL,没有意义 ,IPC_CREAT和IPC_EXCL一起,如果底层不存在,创建之,并返回,如果底层存在,出错返回,返回成功一定是一个全新的shm。size:这个就是你要创建的共享内存多大,共享内存的大小,最好是页(PAGE: 4096)的整数倍。返回值:共享内存的用户层标识符,类似曾经的fd,失败返回-1。原创 2023-02-15 13:33:43 · 311 阅读 · 0 评论 -
Linux进程间通信(管道)
来讲一下这个代码的大致方向,第一部肯定是创建管道,然后就是创建子进程,这里我们是让父进程写子进程读,所以关闭父子进程不需要的fd,写入的一方,fd没有关闭,如果有数据,就读,没有数据就等,写入的一方,fd关闭, 读取的一方,read会返回0,表示读到了文件的结尾,最后关闭父子进程fd,回收子进程。总结管道的特点,理解以前的管道 | ,管道是一个文件–读取–具有访问控制,显示器也是一个文件,父子同时往显示器写入的时候,有没有说一个会等另一个的情况呢,缺乏访问控制。管道是Unix中最古老的进程间通信的形式。原创 2023-02-15 13:38:36 · 894 阅读 · 1 评论 -
Linux动静态库
然后我们的静态库和动态库就出来了,我们想要进行编译的话,是需要.o和.h文件的,但是我们有了库之后就不需要.o文件了,因为都到库里了,我们就需要去另一个目录该他们包装一下.3.一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在标文件的整个机器码。1.静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再要静态库。2.动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。第一种方法是拷贝到系统目录下。原创 2023-06-28 19:33:10 · 216 阅读 · 0 评论 -
Linux基础IO
5. Linux认为,一切皆文件,感性的认识:文件而言:曾经理解的文件: read、write,显示器: printf/cout ->一种write,键盘: scanf/cin . ->一种read,站在你写的程序的角度,加载到内存,站在内存的角度,前两种是output,最后一种是input,对于普通文件 -> fopen/fread ->你的进程的内部(内存),是input,你的进程的内部(内存)-> fwrite -〉文件中,是output。2.文件的所有操作,其实就两种,对内容,对属性。原创 2023-06-20 11:14:12 · 135 阅读 · 0 评论 -
进程控制(进程创建,进程终止,进程等待,进程替换)
进程等待的方法。原创 2022-09-26 11:05:02 · 259 阅读 · 6 评论 -
Linux地址空间
其实这里我们可以想如果使用物理地址空间的话,会出现一种什么情况呢。首先我们将可执行程序加载到物理内存中,形成进程假设出现了野指针问题,该怎么办,这就非常的不安全,所以我们就要对他进行改进,当然这里不是只有一个野指针问题,还有其他的,我就不一一列举了,反正你只要知道她并不安全就是了。所以就要用到我们的虚拟地址空间。原创 2022-09-22 00:17:12 · 30 阅读 · 0 评论 -
Linux权限
1.目录的起始权限是777,文件的起始权限是666.2.最终权限=起始权限&(~umask)umask功能:查看或修改文件掩码新建文件夹默认权限=0666新建目录默认权限=0777但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask格式: umask 权限值说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。原创 2022-08-24 16:07:53 · 236 阅读 · 7 评论 -
Linux基础指令(下)
Linux基础指令原创 2022-08-04 14:45:26 · 139 阅读 · 7 评论 -
Linux基础指令(上)
语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。如: ls –d 指定目录-i 输出文件的 i 节点的索引信息。如 ls –ai 指定文件-l 列出文件的详细信息。-1 一行只输出一个文件。实例ls -al。...原创 2022-08-03 16:37:31 · 76 阅读 · 8 评论