Linux
文章平均质量分 78
WU
佬酒
较劲
展开
-
Linux 操作系统管理命令(全)
jobs 命令执行的结果中,加号(+)表示是一个当前的任务,减号(一)表示是一个当前任务之后的任务。如果后台的任务号有2个,当第[1]个后台任务顺利执行完毕,第[2]个后台任务还在执行中时,当前任务便会自动变成后台任务号码[2]的后台任务,即当前任务是动态变化的。LInux操作系统的用户和组信息保存在系统的配置文件中 ,其中的用户信息保存在/passwd和etc/shadow文件中,组信息保存在/etc/group和/etc/gshadow文件中,这些文件都是文本文件,文件格式类似。原创 2022-12-12 20:01:42 · 26873 阅读 · 8 评论 -
I/O复用——epoll(全)
Epoll 很重要,但是 Epoll 与 Select 的区别是什么呢?Epoll 高效的原因是什么?网上虽然也有不少讲解 Epoll 的文章,但要么是过于浅显,或者陷入源码解析,很少能有通俗易懂的。笔者于是决定编写此文,让缺乏专业背景知识的读者也能够明白 Epoll 的原理。本文核心思想是:要让读者清晰明白 Epoll 为什么性能好。文章会从网卡接收数据的流程讲起,串联起 CPU 中断、操作系统进程调度等知识;再一步步分析阻塞接收数据、Select 到 Epoll 的进化过程;最后探究 Epoll 的实现转载 2022-07-10 10:39:18 · 515 阅读 · 1 评论 -
I/O复用——poll
目录poll APIpoll 编程poll 总结poll系统调用 和 select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪事件。 poll的原型如下:头文件:#include fds参数:pollfd结构类型的数组,它指定所有我们感兴趣的文件描述上发生的可读、可写和异常等事件。pollfd结构体的定义如下: 成员fd:指定文件描述符; 成员events:告诉poll监听fd上的那些事件,它是一系列事件的按位或; 成员revents:由内核修改,通...原创 2022-07-09 11:00:02 · 516 阅读 · 1 评论 -
I/O复用——select(全)
select系统调用的原型如下:头文件 #include返回值 :select成功时返回就绪(可读、可写和异常)文件描述符的总数。如果在超时时间内没有任何文件描述符就绪,select将返回0。select失败时返回-1。如果在select等待期间,程序接收到信号,则select立即返回-1,并设置errno为EINTR。maxfd:参数指定的被监听的文件描述符的总数。它通常被设置为 select 监听的所有文件描述符中的最大值+1,因为描述符是从0开始计数的。readfd......原创 2022-07-08 13:50:35 · 2352 阅读 · 2 评论 -
QT5 安装(Ubuntu20.04) 详细
目录安装前准备1、判断gcc是否安装2、判断g++是否安装3、安装clang编译器4、安装 clang ++5、安装make6、安装make-guile7、安装最新版cmake(时间很长)QT5安装1、安装Qt5的组件2、安装Qt的开发工具3、安装qtcreator4、安装qt安装完毕安装前准备1、判断gcc是否安装判断: gcc -v没有安装的话记得安装:安装如下:sudo apt install gc...原创 2022-04-24 00:23:15 · 67856 阅读 · 29 评论 -
TCP协议的基本知识点
tcp协议1、TCP协议特点1.1连接的建立与断开三次握手四次挥手1.2、TCP的状态转移1.3、复位报文段1.4、交互数据流和成块数据流1.5、带外数据1.6、流式服务特点1.7、应答确认和超时重传1.8、滑动窗口1.9、拥塞控制1、TCP协议特点1.1连接的建立与断开TCP 协议提供的是:面向连接、可靠的、字节流服务。使用 TCP 协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP 连接是全双工的,双方的数据可以通原创 2021-12-15 21:48:50 · 1021 阅读 · 0 评论 -
Linux之socket网络编程(全)
socket网络编程1、什么是套接字socket2、主机字节序列和网络字节序列2、套接字地址结构2.1 通用 socket 地址结构2.2 专用 socket 地址结构2.3 IP 地址转换函数3、网络编程接口1、什么是套接字socket套接字(socket) 是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行。Linux所提供的功能( 如打印服务、连接数据库和提供Web页面)和网络工具(如用于远程登录的rlogin和用于文件传输的ftp)通常都是通过套原创 2021-12-15 00:04:40 · 2152 阅读 · 0 评论 -
Linux 信号量
信号量信号量信号量的定义信号量理论例子Linux信号量机制使用信号量信号量信号量:用于管理对资源的访问。(1) 当我们编写的程序使用了线程时,不管它是运行在多用户系统上、多进程系统上,还是运行在多用户多进程系统上,我们通常会发现,程序中存在着一部分临 界代码,我们需要确保只有一个进程 (或一个执行线程) 可以进入这个临界代码并拥有对资源独占式的访问权。(2)信号量有着复杂的编程接口,但幸运的是,我们可以很轻松地为自己提供一个更简单的接口,它足够应付大多数信号量编程的问题。(3)为了防止出现因多个程原创 2021-12-14 17:48:53 · 1533 阅读 · 1 评论 -
Linux 线程
线程的创建与同步1、线程的概念与实现方式(1)线程的概念(2)线程的实现方式(3)进程与线程的区别2、线程使用(1)线程库中的接口介绍(2)多线程代码(3)线程并发运行3、线程同步(1)互斥锁接口介绍代码示例(2)信号量接口介绍代码示例(3)条件变量接口介绍代码示例(4)读写锁接口介绍代码示例4、线程安全1、线程的概念与实现方式(1)线程的概念线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进原创 2021-12-13 17:36:39 · 170 阅读 · 0 评论 -
Linux进程间通信(4)消息队列
消息队列消息队列原理消息队列接口介绍代码示例消息队列原理消息队列是消息的链表,存放在内核中并由消息队列标识符表示。 消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每个数据块都可以被认为是有一个类型,接受者接受的数据块可以有不同的类型。 但是同管道类似,它有一个不足就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数(MSGMNB),系统上消息队列的总数上限(MSGMNI)。可以用cat /proc/sys/kernel/msgmax查看具体的数据。 内核为每原创 2021-12-12 17:51:10 · 902 阅读 · 0 评论 -
Linux进程间通信(3)共享内存
共享内存共享内存共享内存原理共享内存接口介绍三级目录共享内存共享内存原理共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理内存上申请一块空间,多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访问共享内存中的地址,就好像它们是由 malloc 分配的一样。如果某个进程向共享内存写入了数据,所做的改动将立刻被可以访问同一段共享内存的任何其他进程看到。由于它并未提供同步机制,所以我们通常需要用其他的机制来同步对共享内存的访问。共享内存接口介绍1、头文件#inclu原创 2021-12-12 12:01:44 · 205 阅读 · 0 评论 -
Linux进程间通信(2)信号量
Linux信号量信号量的背景信号量在1968年由Edsger Wybe DijKstra9提出,此后它逐渐成为一种常用的锁机制。信号量支持两个原子操作P(和V(),这两个名字来自荷兰语Proberen和Vershogen。前者叫做测试操作(字面意思是探查),后者叫做增加操作。后来的系统把两种操作分别叫做down()和up0, Linux也遵从这种叫法down()操作通过对信号量计数减1来请求获得-一个信 号量。如果结果是0或大于0,获得信号量锁,任务就可以进入临界区。如果结果是负数,任务会被放入等待队列原创 2021-12-12 01:34:15 · 1185 阅读 · 0 评论 -
Linux进程间通信(1)管道
管道管道可以用来在两个进程之间传递数据,如: ps -ef | grep “bash”, 其中‘|’就是管道,其作用就是将 ps 命令的结果写入管道文件,然后 grep 再从管道文件中读出该数据进行过滤。你可以用管道操作符I来连接进程。Linux与MS-DOS不同,在Linux下通过管道连接的进程可以同时运行,并且随着数据流在它们之间的传递可以自动地进行协调。举一个简单的例子,你可以使用sort命令对ps命令的输出进行排序。$ ps >psout.txt$ sort psout.txt原创 2021-12-11 01:41:27 · 1313 阅读 · 1 评论 -
Linux 生产者/消费者
生产者消费者生产者消费者问题概述生产者/消费者问题,也被称作有限缓冲问题。可以描述为:两个或者更多的线程共享同一个缓冲区,其中一个或多个线程作为“生产者”会不断地向缓冲区中添加数据,另一个或者多个线程作为“消费者”从缓冲区中取走数据。生产者/消费者模型关注的是以下几点:*生产者和消费者必须互斥的使用缓冲区*缓冲区空时,消费者不能读取数据*缓冲区满时,生产者不能添加数据生产者消费者模型优点:解耦:因为多了一个缓冲区,所以生产者和消费者并不直接相互调用,这样生产者和消费者的代码发生变化,都不会原创 2021-11-28 00:00:00 · 1545 阅读 · 2 评论 -
Linux之gcc编译过程详解
1、gcc 分步编译链接(1)预编译:gcc -E main.c -0 main.i(2)编译:gcc -S main.i -O main.s(3) 汇编:gcc -C main,s -O main.O(4) 链接:gcc main.o -O main//预编译阶段a)删除所有的“ #define”,并且展开所有的宏定义;b)处理所有的条件预编译指令,“#if”、 “#ifdef”、 “#endif" 等;c)处理“#include" 预编译指令,将被包含的文件插入到该预编译指令原创 2021-12-10 12:54:43 · 1072 阅读 · 0 评论 -
复习一下linux下基础命令
1、基础命令(1)pwd 显示当前位置的绝对路径(2)cd 切换的位置(3)ls 显示目录中的文件(4)man 帮助手册,用来查看命令,系统调用,库函数(5)touch 创建普通文件(6)mkdir 创建目录文件(7)rmdir 删除空目录,不能是非空目录,非空目录需要使用“rm -r name”删除(8)cp 拷贝文件,拷贝目录文件时,需要加上“-r”(9)mv - 剪切(移动文件) --文件重命名(10)rm 删除文件,删除文件原创 2021-12-09 19:21:31 · 444 阅读 · 0 评论 -
Linux之gdb调试详解
1、gdb调试分为Debug版本和Release 版本Debug版本Debug版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是debug版本的可执行文件。Debug版本的生成:因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。gcc -c hello.c -g -->生成包含调试信息的中间文件gcc -o hello hello.o或者gcc -o hello hello.c -原创 2021-12-10 13:07:07 · 1385 阅读 · 3 评论 -
Linux系统目录结构与文件
一、Linux系统目录结构1、目录结构Linux系统的目录结构是一颗倒状树,如图所示:2、常见目录说明/bin存放常用命令 (即二进制可执行程序)/etc 存放系统配置文件/home所有普通用户的家目录/root管理 员用户的家目录/usr存放系统应用程序及文档./proc虚拟文件系统目录,以进程为单位存储内存的映射/dev存放设备 文件/mnt临时挂载点/lib存放库文件/boot系统内核及启动有关的文件/tmp存放各 种临时文件,是所有用户均可访问的地点/var存放系统运原创 2021-12-09 18:56:27 · 467 阅读 · 0 评论