![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
是谁在许愿瓶里写满了悲哀
绳可锯木断,水可滴石穿。
展开
-
Linux下的Find命令
每种操作系统都有很多种文件组成,对于linux是一中“一切皆文件”的操作系统更是如此。掌握Find命令的应用,会使你在学习linux的道路上如虎添翼。 find指令 可以在任何目录下搜索要找的文件! 1 ,使用格式:find [pathname] [-options] [-print -exec -ok…] 2 , 命令功能:用于在文件树种查找文件!并作出相应处理(可能访问磁盘) 3 ,原创 2017-03-30 23:25:01 · 196 阅读 · 0 评论 -
线程同步---互斥锁
一:为什么要用多线程?避免阻塞:一个进程如果只有一个线程的话,当这个一个线程阻塞则就整个进程阻塞,无法再去完成其他事情。提高效率,避免CPU空转:程序经常涉及读写操作就会访问磁盘,这些操作的速度比CPU慢的多,而为了等待这些操作的响应,CPU又不能去干其他的事情或者处理新的请求,导致这种单线程的程序性能差。而多线程会共享同一地址空间,线程的切换比进程快。二:Linux提供线程同步...原创 2018-04-14 00:03:21 · 244 阅读 · 0 评论 -
【Linux】进程间通信------消息队列
我们知道进程是一个具有独立功能的程序关于某个数据结合的一次活动,是系统进行资源分配和调度运行的基本单位。 每个进程是相互独立的,没有关联,不能在一个进程中直接去访问另一进程的资源。 那么问题来了,不同的进程之间肯定要进行信息交互和传递,所以我们就必须进程间通信(IPC),那么他们是怎么通信,方式有哪些?进程间通信的目的:数据传输:一个进程要将数据发给另一个进程。资源共享:多进程...原创 2018-05-21 00:33:29 · 258 阅读 · 0 评论 -
【Linux】进程间通信----共享内存
共享内存,顾名思义就是多个进程共用同一块物理内存;这块物理内存被映射到不同进程的地址空间中进行通信,A进程可以及时看到B进程对共享内存中数据的更新,反之亦然。 不同的进程可以直接读写内存,所以它最大的特点就是效率高,但是共享内存本身不带任何同步互斥机制,所以当多个进程同时对共享内存操作时会破坏内容,所以,我们使用共享内存通信时候,同步互斥机制要我们用户自己来完成。共享内存特点: 1....原创 2018-05-21 22:32:12 · 189 阅读 · 0 评论 -
【Linux】信号
我们这里谈的信号,和进程间通信的信号量没有任何关系!!!信号是什么?生活中有太多的信号,比如下课铃声,交通红绿灯,等等,这些信号通知给我们一定的信息;在Linux中:信号就是一种通知机制。 Linux中的信号可以通过命令:kill -l 查看。 1-31号信号称为普通信号(不可靠信号,非实时信号);34-64称为实时信号(可靠信号); PCB里有一个整型变量,变量的每个比特位的...原创 2018-05-23 00:56:23 · 168 阅读 · 0 评论 -
实现一个网络版加法计算器
实现网络版本加法器,客户端输入两个加数发给服务器,服务端进行计算,并把结果返回给客户端。方案:定义request结构体;包含两个加数;定义response结构体,包含计算的结果;发送数据时将这个结构体按照⼀个规则转换成字符串, 接收到数据的时候再按照相同的规则把字符串转化回结构体;代码如下: 定义个头文件com.h 客户端client 代码: 服务端 server...原创 2018-07-27 00:21:17 · 1157 阅读 · 0 评论 -
进程间关系及守护进程
进程组: 一个或者多个进程的集合。进程有自己的进程ID,同时他还属于一个进程组。既然有进程组那么肯定就有组长进程; 组长进程的ID等于该进程组ID;这个组中只要还有一个进程还在,进程组就在!与组长在不在没关系。作业控制:一个shell可以运行一个前台作业和任意个后台作业。前台和后台都可以由多个进程 组成。 什么是shell?: shell 单词是“壳”的意思,在Linux中shell就是一...原创 2018-08-01 16:48:47 · 164 阅读 · 0 评论 -
如何优雅的在主线程中结束一个从线程?
面试题:如何优雅的在主线程中结束一个从线程?: 假如现在一个线程阻塞了,主线程要结束点从线程,怎么办? —回答:调用pthread_cancel()终止它线程的退出方式: 1. 从线程函数中return(不适合主线程); 2. 调用pthead_exit()函数终止自己; 3. 调用pthread_cancel终止同一进程中的其他线程。线程等待:pthread_join(...原创 2018-09-06 11:55:04 · 680 阅读 · 0 评论 -
Linux下的链接文件
Linux下有多少种类型的文件?~~了解一下共7中:普通文件(-)目录文件(d)设备文件:字符设备(c),块设备(b)套接字文件(s);例如socket套接字链接文件(l),硬链接,软链接管道文件(p)简单了解下linux文件系统:每个文件都有一个inode;在Linux中,我们查文件时候,其实是通过inode节点查到的。只是将文件名和inode几点关联起来了,通过文件名就...原创 2018-10-02 01:30:26 · 835 阅读 · 0 评论 -
线程同步---信号量
POSIX信号量POSIX信号量和SystemV信号量作用相同,都是用于同步操作。 信号量和互斥锁的区别:互斥锁只允许一个线程进入临界区;信号量同一时刻允许多个线程进入临界区。 (1)初始化信号量#include<semaphore.h> int sem_init(sem_t *sem,int pshared,unsigned int value); 参数: sem: 信...原创 2018-04-15 09:40:35 · 209 阅读 · 0 评论 -
线程同步---条件变量
条件变量(cond):为什么需要条件变量?当一个线程互斥的访问某个变量时,它可能发现在其他线程改变该变量状态之前,它什么也做不了!(此时就是死锁,一种僵死状态)我们需要一种机制,当互斥量锁住以后,当前线程还是无法完成自己的操作,那么就应该释放互斥量,让其他线程继续工作。 1. 可以用轮询机制,不停的查询你需要的条件; 2. 用条件变量机制;条件变量函数: (1)初始化...原创 2018-04-15 00:07:03 · 226 阅读 · 1 评论 -
【Linux】用c++实现进度条程序
无论下载,解压缩,复制等情况时,我们总能看到进度条这种东西。进度条以图片形式的可视化窗口直观的显示出计算机处理当前任务的速度,完成度,剩余完成的任务量,以及需要的时间等信息,所以在此我们可以自主实现一个简易的进度条小程序,在centos环境下的Linux系统下编写. 其中fflush是刷新文件缓冲区的。原创 2017-04-09 16:21:25 · 933 阅读 · 0 评论 -
Linux中cd进入一个目录的权限
Linux权限管理: 1,文件和文件目录的所有者:u—User 2,文件和文件目录的所有者所在的组的用户:g—Group 3,其他用户:o—Others 文件访问权限的种类: “r”—-读权限(4); “w”—写权限(2); “x”—可执行权限(1);对于文件来说具有执行文件的权利:对于目录来说有进入目录的权利。 “-“—表示不具有该项权限,例如”-r“表示没有读权限。 目录的可执原创 2017-03-25 19:20:46 · 23766 阅读 · 2 评论 -
Linux下的 Access Modify Change
我们进入linux系统,查看一个文件或者文件系统的信息。 例如:进入code目录,stat file1文件 我们看到左下方有三个时间,分别是Access, Modify 和Change。 1,Access time 最后一次访问文件或者目录的时间。 当我们再次访问文件file2后,查看file2的信息 我们发现它的Access 时间已经发生变化了。 2,Change time原创 2017-03-25 15:46:52 · 475 阅读 · 0 评论 -
僵尸进程&孤儿进程
我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。 僵尸进程: 一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或wait原创 2017-05-07 01:09:43 · 194 阅读 · 0 评论 -
Linux_线程
什么是线程? “线程”有时候被称为轻量级进程,是程序执行流的最小单元,一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之原创 2017-06-04 19:13:42 · 234 阅读 · 0 评论 -
【linux】进程创建、等待、终止
创建进程—fork函数 函数原型:pid_t fork(void); 返回值:子进程返回0;父进程返回子进程pid,失败返回-1(失败的原因:1内存不够;2系统进程数量太多); 注意:fork之前,父进程独立执行,fork之后,父子两个执行流分别执行。但是父子进程谁先执行是由系统调度决定。 写实拷贝:父进程创建子进程后,子进程室父进程的副本;父子代码共享,父子不写入时,数据也是共享。当任...原创 2017-12-19 18:52:21 · 868 阅读 · 0 评论 -
linux task_struct结构体的注释
什么是task_struct结构体? 说到它大家可能会感到陌生,它其实就是Linux下的对进程控制块PCB定义的一个结构体。进程概念: 进程是程序的一次动态的执行过程。进程=程序段+数据段+进程控制块。进程控制块: 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的 进程控制块是task_struct结构体。task_struct结构体包含的内容: 1,标示原创 2017-04-15 22:07:15 · 413 阅读 · 0 评论 -
【Linux】管道
什么是管道?—–我们把从一个进程连接到另一个进程的一个数据流成为管道。 作用:使进程间相互通信。 管道分为两种:1、匿名管道;2、命名管道匿名管道 创建一个匿名管道——函数原型:int pipe(int fd[2]); 参数:fd是文件描述符组,fd[0]表示读端,fd[1]表示写端。(0像读东西的嘴,1像写字的笔)。 返回值:创建成功返回0;失败返回错误代码。 写一个测试用例: 1#原创 2017-12-22 18:02:59 · 272 阅读 · 0 评论 -
基于POSIX实现一个文件下载线程池
先理清思路:线程池需要维护一个任务队列,允许配置活动的线程数,线程池从任务队列中取任务,根据拿到的任务执行响应处理,所以每个任务是这样一个结构体:typedef void* (*FUNC_POINT)(void* arg); //定义一个函数指针typedef struct Task //任务结构体,{ //void* (*Handler)(void* arg); //处理任务...原创 2019-07-25 17:32:34 · 162 阅读 · 0 评论