linux
听说西佳佳难得很
要学的有好多……
是自己的功课,在这里没有必要欺骗自己,要好好弄懂在记录的知识点。感受到孤单的时候也要向前,努力成为最完善,最有力,最强大的自己。
展开
-
回顾:内存相关(slab还没
堆、栈和静态存储区C++中,内存的分配是否合理直接影响着程序的效率和性能C++将内存划分为三个逻辑区域:堆、栈和静态存储区,其中的对象分别为堆对象、栈对象以及静态对象一、基本概念:栈,一般用于存放局部变量或对象,按值进行传递时编译器会给我们生成很多的临时对象,而生成这些临时对象的时间和空间的开销可能是很大的,所以对于“大”对象最好用const引用传递代替按值进行函数参数传递堆,又叫自由存储区,是在程序执行的过程中动态分配的,所以它的最大特性就是动态性。所有的堆对象的创建和销毁都要由程序员负责,如果原创 2020-09-28 10:41:16 · 296 阅读 · 0 评论 -
⚠⚠项目时遇到的新函数新问题小记xX
管道:一种进程间通信的方式管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立两个管道;只能用于具有共同祖先的进程之间进行通信。通常,一个管道由一个进程创建,然后改进程调用fork,此后父子进程之间就可以应用该管道下午开始看百度网盘里的C++知识点复习(第一季)、stl源码(第二季)、winsocket多线程(第三季)、miniftpd、大并发服务器开发、...原创 2020-05-26 23:12:20 · 416 阅读 · 0 评论 -
Linux编程复习(3)——信号与中断
信号是响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动。某些状况就是指某些条件错误,如内存段冲突、浮点处理器错误或者非法指令等。信号是在软件层次上对中断的一种模拟,所以信号也称为是软中断信号与中断的相似点:1,都采用相同的额异步通信方式2,当检测出有信号或中断请求时,都暂停证在执行的程序而转去执行相应的处理程序3,都在处理完毕之后返回到原来的断点4,对信号或中断都可进行屏蔽信号与中断的区别:1,中断有优先级,而信号没有,所有的信号都是平等的2,信号处理程序是在用户态下运行的,而中原创 2020-05-25 10:45:43 · 555 阅读 · 0 评论 -
Linux编程复习2——文件与IO(2):文件共享、复制文件描述符
1, 关于文件共享(一个进程两次打开同一个文件、两个进程打开同一个文件)2,dup,dup2, fcntl文件共享一个进程打开两个文件v节点信息存放的主要就是stat函数,i节点信息,如果打开同一个文件对v节点表是共享的,写共享看②,但两个进程的文件偏移量是独立的,这意味着读程序是独立的,看①首先定好两个不同的mode,fd1只读,fd2读写①两个文件都从文件读5个????,结果文件内容是一样的,这时因为每一个文件都有自己的当前文件偏移量,不会被影响 17 int main(int arg原创 2020-05-23 23:29:32 · 187 阅读 · 0 评论 -
linux编程复习1——文件与IO(1)
1,实现文件拷贝复习文件的打开2, 关于lseek3,实现最简单的一个ls4,stat结构体及简单示例的代码简单实现与整理:1实现文件拷贝复习文件的打开 1 #include<unistd.h> 2 #include<sys/types.h> 3 #include<sys/stat.h> 4 #include<fcntl.h> 5 #include<stdlib.h> 6 #include<stdio.h&g原创 2020-05-23 16:25:47 · 256 阅读 · 0 评论 -
Linux——信号量概念及其相关操作函数,并用信号量实现生产者消费者
信号量semaphore也是用于线程同步的锁机制,可以理解为是进阶版的互斥锁:由于互斥锁的粒度较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁就没有办法实现,只能将整个对象锁住。这样虽然达到了多线程操作共享数据时保证数据正确性的目的,却导致线程的并发性下降。线程就从并行执行变成了串行执行。与直接使用单进程一样了。信号量相当于初始化为N的互斥量,可以允许同时有N个线程来访问...原创 2020-05-06 17:54:52 · 470 阅读 · 0 评论 -
Linux——条件变量实现生产者消费者模型
1、条件变量的生产者消费模型流程分析2、条件变量实现生产者消费者模型// 1, 创建两个线程,一个生产者线程,一个消费者线程//2,创建完线程之后就可以直接写回收线程部分的代码,养成习惯//3,分别写两个线程的回调函数//4,去构造条件变量的内容,这边写一个放内容的msg结构体,定义结构体类型的全局变量头指针//3.1,开始写生产者消费者的操作,两者都需要对内容进行加锁,因此先去定义...原创 2020-05-06 16:57:36 · 588 阅读 · 5 评论 -
Linux——互斥锁、读写锁、条件变量简单认识
线程同步:协调同步,对公共区域数据按序访问,防止数据混乱,产生于时间有关的错误锁的使用:对公共数据进行保护,所有线程【应该】在访问公共数据前先拿到锁再访问,但锁本身不具备强制性1. 借助互斥锁管理共享数据实现同步mutex的主要应用函数pthread_mutex_init 初始化pthread_mutex_destory 销毁pthread_mutex_lock 加锁pthread_...原创 2020-05-06 14:13:12 · 269 阅读 · 0 评论 -
Linux——线程2(过)| pthread_exit、pthread_join、pthread_detach、线程属性设置分离线程
比较几个退出函数pthread_exit():退出当前线程exit():退出当前进程return:返回到调用者那里去一、pthread_exit函数:将单个线程退出void pthread_exit(void *retval); 参数retval表示线程退出状态,通常传NULL在线程中,禁止使用exit函数,因为会导致进程内所有线程全部退出,因此在多线程环境中,应尽量少用exit函数...原创 2020-05-06 11:19:24 · 710 阅读 · 0 评论 -
Linux——线程1 | 用C创建线程、循环创建多个子线程
一、线程基础进程:有独立的进程地址空间,有独立的pcb线程:有独立的pcb,没有独立的进程地址空间因此进程线程最本质的区别就是:是否共享地址空间在Linux下线程是最小的执行单位;进程是最小的分配资源单位,可看成只有一个线程的进程看进程下的线程号:ps -Lf 进程ID LWP—>CPU执行的最小单位线程共享和非共享线程共享资源:1,文件描述符表2,每种信号的处理方式...原创 2020-05-05 10:51:57 · 4611 阅读 · 2 评论 -
Linux——会话、守护进程创建模型及代码实现
会话:概念:多个进程组的集合守护进程创建步骤分析守护进程创建原创 2020-05-04 15:20:00 · 181 阅读 · 0 评论 -
Linux——用C实现子进程借助信号回收
//放了个五一小假,对于什么时候返校似乎心态上稍微平和一点了,总之,无论如何都是要抓紧在家学的时间,10号争取把网络编程都学完吧,然后要开始做项目和刷题,不简单会困难,但是都是要一一面对去克服的,所以啊躲避往后拖不但没有用反而会让事情变糟糕的===还有好多要学,每天都要加油啊????在每天都学习的基础上,以后能走到哪一步就算哪一步吧xX//整理复习子进程借助信号进行回收1,既然是子进程回收,那首先...原创 2020-05-04 10:06:30 · 581 阅读 · 0 评论 -
Linux——信号集操作函数、signal实现信号捕捉、sigaction实现信号捕捉、内核实现信号捕捉简析、⭐借助信号捕捉回收子进程⭐
一、信号集操作函数只能通过阻塞信号集mask才能去改变未决信号集,而阻塞信号又需要通过自定义一个信号集去改变,通过以下函数就可以创建一个信号集setsigset_t set;//自定义信号集int sigemptyset(sigset_t *set);//清空信号集int sigfillset(sigset_t *set);//全部置1int sigaddset(sigset_t *se...原创 2020-05-03 22:47:14 · 436 阅读 · 1 评论 -
Linux——信号相关的概念和机制、Linux常见信号、kill函数、alarm函数、setitimer函数
终于信号了!!!冲啊 5月第一天,进度稍稍慢了,加油加油一、信号的机制A给B发送信号,B收到信号之前执行自己的代码,收到信号后不管执行程序到什么位置了,都要暂停运行,去处理信号,信号处理完毕再继续执行。信号的特质:由于信号是通过软件方法实现的,其实现手段导致信号有很强的延时性,但对于用户来说,这个延迟不易察觉每个进程收到的所有信号,都是由内核负责发送的,内核处理1. 与信号相关的事件和...原创 2020-05-01 10:19:33 · 425 阅读 · 0 评论 -
Linux——mmap函数、父子进程间mmap通信、无血缘关系间mmap通信、mmap匿名映射区
一、存储映射I/O(磁盘内容映射到内存)一、概念理解存储映射I/O(Memory-mapped I/O)使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。与此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可以在不使用read和write函数的情况下,使用地址(指针)完成I/O操作。(本来在磁盘上的内容,想要去读写就需要open打开...原创 2020-04-30 17:05:11 · 1301 阅读 · 0 评论 -
Linux——(管道练习)C实现父子进程通信、兄弟进程通信、多个读写端操作管道及管道缓冲区大小、fifo实现非血缘间进程通信
一、 父子进程通信 lswc-l父进程ls写到管道,子进程wc管道的内容父进程创建管道(拥有读写两端),父进程fork子进程,父进程要将原本输出到屏幕上的内容输出到管道中,用dup实现,然后execlp去进行ls操作;子进程同理,将原本从标准输入的内容变从管道去读取,用dup实现,再用execlp去进行wc操作#include<stdio.h>#include<stdli...原创 2020-04-30 11:30:28 · 2545 阅读 · 0 评论 -
Linux——进程间通信的常见方法(管道、信号、共享映射区、本地套接字)、管道的了解与简单用法
进程间通信IPC的原理:常见的进程间通信方式有:管道(使用最简单)信号(开销最小)共享映射区(无血缘关系)本地套接字(最稳定)二、管道的特质与基本用法内核借助环形队列机制,使用内核缓冲区实现,血缘关系间进程可用创建并打开管道:int pipe(int pipefd[2]);参数分别是读写,pipefd[0]是读端,pipefd[1]是写端,成功返回0,失败返回-1例子:...原创 2020-04-30 09:23:49 · 186 阅读 · 0 评论 -
Linux——wait回收子进程、回收子进程退出值和异常终止信号,waitpid回收子进程/回收多个子进程,两个回收函数的总结
一、wait回收子进程一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,==但它的PCB还保留着,内核在其中保存了一些信息:==如果是正常终止则保存着退出状态;如果是异常终止则保存着导致改进程终止的信号是哪个,这个进程的父进程可以调用wait或waitpid获取这些信号,然后彻底清除掉这个进程。进程的退出状态可以在shell中用特殊变量$?查看,因为shell是它的父进程,当它终...原创 2020-04-30 08:55:48 · 815 阅读 · 0 评论 -
Linux——孤儿进程和僵尸进程概念了解
一、孤儿进程孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,成为init进程领养孤儿进程init进程孤儿院==demo????子进程一直在循环,而父进程之后就“死亡”二、僵尸进程僵尸进程:进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,编程僵尸(Zombie)进程,注意,僵尸进程是不能用kill命令清除掉的,因为kill命令知识用来终...原创 2020-04-29 16:29:23 · 374 阅读 · 0 评论 -
Linux——exec函数族原理及特性、execlp和execl函数
一、exec函数族原理fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新的程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。将当前进程的.text、.data替换为索要加载的程序的.text、...原创 2020-04-29 15:34:59 · 2827 阅读 · 0 评论 -
Linux——fork函数原理、fork创建子进程、getpid和getppid、循环创建多个子进程⭐、父子进程共享⭐⭐、gdb调试父子进程
一、fork函数fork()返回值是pid_t类型的创建成功时子进程返回0,父进程返回子进程id,所以一次fork调用两次返回二、创建子进程#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<pthread.h>...原创 2020-04-29 11:03:18 · 811 阅读 · 0 评论 -
Linux——dup、dup2、fcntl实现dup描述符
dup和dup2dup就是拷贝原来一个副本,一般就是起到保存的作用dup2 = dupto,拷贝文件描述符,返回的是新文件描述符,指向了原来文件描述符的文件./dup2 test1 test 2//分析:是往fd2写的,但实际1234567是加到了fd1中,即test1中代码????fd3指向一个文件,fd4也指向一个文件,dup2之后,fd4就指向了fd3的文件,所以上述代码返回的是te...原创 2020-04-27 17:34:00 · 283 阅读 · 0 评论 -
linux——递归遍历目录的实现
一、递归目录分析2,实现#include<stdio.h>#include<stdlib.h>#include<string,h>#include<unistd.h>#include<pthread.h>#include<sys/stat.h>#include<dirent.h>void is...原创 2020-04-27 16:06:51 · 667 阅读 · 0 评论 -
Linux——lseek函数、stat函数、lstat和stat、linux和Unix隐式回收、目录操作函数
一、lseek函数获取文件大小示例????扩展文件大小示例,但是如果要真改变文件大小必须有I/O读写操作无I/O示例的扩展????结果:原来大小是777,扩展111,lseek是888,但是文件大小还是777加上I/O操作,即加个write最重要的是,文件读写使用的是同一偏移位置,因此在文件读写的时候需要用lseek改变一下文件读写位置如果注释lseek那行如上述代码所示,运行代码...原创 2020-04-27 11:47:05 · 409 阅读 · 0 评论 -
linux——文件描述符、阻塞/非阻塞(代码解释)、fcntl、
一、文件描述符PCB进程控制块:本质是结构体,成员是文件描述符表,里面有文件描述符0/1/2/…/1023,一个进程默认打开文件的最大数是1024,取用的时候用表中可用的最小的,其中0——STDIN_FILENO1——STDOUT_FILENO2——STDERR_FILENO平时返回的fd就是0123这些数(相当于索引下标,就是文件描述符),内容是一个个的指针,指针指向一个个的文件结构...原创 2020-04-26 22:52:29 · 3426 阅读 · 0 评论 -
linux——read和write函数实现cp、用户级缓冲预读入缓冲的简单认识
用read和write实现cp1,注意头文件2,fd1是源文件,传入参数中的第一个,fd2是目标文件,传入参数中的第二个,要写入的文件至少可写:如果没有当前文件就创建文件并设置权限,如果已经有文件就截断为0再重新写3,定义一个缓冲区,读到缓冲区,再从缓冲区中写入目标文件4,用循环,知道读到源文件尾返回为0才停止5,养成习惯,打开文件就要关闭文件扩展:关于错误处理函数:在系统编...原创 2020-04-24 16:51:28 · 918 阅读 · 0 评论 -
linux——open函数
1, 使用open()函数调用需要注意头文件,<unistd.h>服务于open函数,<fcntl.h>服务于打开方式mode代码中就是O_RDONLY | O_CREATE,输入输出需要<stdio.h>例子中是创建新文件需要三个参数,具体不同用法查看man手册O_EXEC:是否存在 /O_NONBLOCK:无阻塞/ O_TRUNC:截断文件大小...原创 2020-04-24 14:36:07 · 1140 阅读 · 0 评论 -
man手册一共九卷
原创 2020-04-24 12:55:19 · 318 阅读 · 0 评论 -
linux2——GDB调试,makefile规则(比之前的深一点点)
一、常用gdb指令一览:二、makefile1,超简单例子:2,基本规则(在替换之前,能看懂之前==)3,经过替换开始一眼看不懂==4,但是即便经过3的变换也无法做到“自动化扩展”,比如加一个乘法函数就需要再写一个乘法的规则,因此有模式规则%.o:%.c,就是.o文件依赖.c文件===>gcc -c $< -o %@$<:如果将该自动变量应用在模式规则...原创 2020-04-24 11:34:41 · 170 阅读 · 0 评论 -
Linux系统编程1——基础
一些基础知识就快速过吧简短计划:17休息18(46 makefile结束19开始系统编程 20 21 22anyway 白天上课(也当复习) 晚上论文,尽量5、6天结束然后开始网路编程,还有stl没有学,要抽空看了的忽然意识到分布式都还没有安排进去,zookeeperKafka之类的哦哟明天见吧,今天早睡啦20200416vimvim环境配置(gcc编译4步骤...原创 2020-04-18 16:34:36 · 241 阅读 · 1 评论 -
linux安装redis一路默认下来后来去哪儿找redis服务器
根目录下的etc/init.d就可以找到redis-server了!原创 2020-04-06 22:10:27 · 730 阅读 · 0 评论 -
makefile初学
说明:本文转载总结自 http://blog.csdn.net/haoel/article/list/4 作者:陈皓一个项目中的源文件有很多,会按照其类型、功能、模块等分别放在若干个目录中,makefile定义了一系列规则来指定哪些文件需要先编译,哪些文件要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。m...转载 2020-04-01 23:44:56 · 184 阅读 · 0 评论 -
Linux第一步:安装redis软件(VMtools安装时无内容,ubuntu配置阿里源,redis直接用wget下载被connectionr efused
昨天试着学redis,发现也是在linux下操作的,对Linux一直都停留在大三学的pwd,cd上面,不要再拖啦,下午B站看了一些入门课,还是将指令的多一些,光看也记不住,还是从动手开始吧。第一步就安装软件吧。(想截图记录一下,发现没有办法复制过来……果然动起手来问题就是多多多????deb http://mirrors.aliyun.com/ubuntu/ quantal main restrict...原创 2020-02-27 23:50:00 · 427 阅读 · 0 评论 -
Ubuntu虚拟机找不到终端
快捷键“Ctrl+Alt+T”即可打开终端窗口或者按“Ctrl+Alt+F1-F6”均可进入终端(模拟终端,不显示桌面)想要右键打开终端apt-get install nautilus-open-terminal注销系统重新登录,即可。————————————————版权声明:本文为CSDN博主「appke8461」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出...转载 2020-02-22 20:13:13 · 2044 阅读 · 0 评论