Linux
文章平均质量分 85
Y-ANG
这个作者很懒,什么都没留下…
展开
-
Linux - sticky bit
一、粘滞位是什么?粘滞位是Linux下文件权限的一个旗标,当对一个文件设置了粘滞位后,只有owner用户或者root用户才可以对该文件进行删除或移动,但假若不对文件设置粘滞位,任何对该文件具有写和执行权限的用户都可以移动这个文件。因此,对文件设置粘滞位从一方面来将还是对文件有安全保护的。原创 2016-12-30 12:47:58 · 573 阅读 · 0 评论 -
cut & sort & uniq 工具合集
cut命令主要接受三个定位方法:-b , -c , -fsort工具的常用选项:-u,-r,-o,-n,-k,-t,-funiq命令常用选项:-d,-u,-c原创 2017-05-04 13:35:26 · 1204 阅读 · 0 评论 -
socket编程之实现一个简单的TCP通信
一、理解socket1、socket即为套接字,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一的标识网络通讯中的一个进程,“IP地址+TCP或UDP端口号”就为socket。 2、在TCP协议中,建立连接的两个进程(客户端和服务器)各自有一个socket来标识,则这两个socket组成的socket pair就唯一标识一个连接。 3、socket本身就有“插座”的意思,因此用来形容原创 2017-03-29 18:33:01 · 92986 阅读 · 2 评论 -
线程的同步与互斥:互斥锁
什么是线程的同步与互斥?同步:假设现有线程A和线程B,线程A需要往缓冲区写数据,线程B需要从缓冲区读数据,但他们之间存在一种制约关系,即当线程A写的时候,B不能来拿数据;B在拿数据的时候A不能往缓冲区写,也就是说,只有当A写完数据(或B取走数据),B才能来读数据(或A才能往里写数据)。这种关系就是一种线程的同步关系。互斥:对于线程A和线程B来讲,在同一时刻,只允许一个线程对临界资源进行操作,即当原创 2017-05-29 11:13:07 · 18540 阅读 · 1 评论 -
多线程实现生产者与消费者模式
生产者-消费者模式的简介:在实际的软件开发过程中,我们将产生数据的模块称为生产者,处理数据的模块成为消费者。但仅有这两者还不够成为一个生产者-消费者模式,还需要有一个缓冲区(一段内存区域)作为中介,生产者产生的数据放入缓冲区,消费者从缓冲区读取数据并处理。(注:上述所说的模块是广义的,可以是类,函数,线程,进程等)我们可以将这二者之间的关系图表示出来:总结:我们用3-2-1的方法来简单描述一个生产者原创 2017-06-01 10:08:07 · 10307 阅读 · 3 评论 -
线程的同步与互斥:条件变量&信号量
条件变量与互斥锁一样,都是一种数据变量,这两者通常搭配起来使用。条件变量的作用:实现线程的同步与互斥:接口:原创 2017-05-31 21:40:45 · 3803 阅读 · 1 评论 -
匿名管道和命名管道
进程间通信(IPC)每个进程有各自不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到。所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间中拷贝到缓冲区,进程2再从缓冲区把数据读走。内核提供的这种机制就是进程间通信。 通信需要媒介,两个进程间通信的媒介就是内存。通信的原理就是让两个或多个进程能够看到同一块共同的资源,这块资源一般都是由内存提供。匿名管道(原创 2017-04-03 15:02:38 · 19617 阅读 · 0 评论 -
信号
信号的基本理解什么是信号 提到信号,大部分人的第一反应都是红绿灯,没错,这是日常生活中的一种信号,它给了人们提示,当各种颜色的灯亮起时我们应该做什么样的处理动作。不过我们今天说的信号时Linux下的信号(signal),我们回想一种场景,当我们在Linux下打开一个终端,假设现在正有一个进程在运行,它的工作就是不断循环输出“hello”,此时,当我们按下Ctrl-c时,这个进程就会被终止掉。在此原创 2017-06-07 20:09:39 · 550 阅读 · 0 评论 -
进程间通信:消息队列&信号量&共享内存
进程间通信之管道,点击这里: http://blog.csdn.net/qq_33951180/article/details/68959819消息队列:消息队列是一种进程间发送二进制数据块的机制,每个数据块都有特定的类型,接受者进程可以有不同的类型值。信号量:共享内存:原创 2017-06-21 10:24:08 · 2220 阅读 · 0 评论 -
Linux - 信号
一、信号的基本理解提到信号,大部分人的第一反应都是红绿灯,没错,这就是一种信号,它给了人们提示,当各种颜色的灯亮起时我们应该做什么样的处理动作。不过我们今天说的信号时Linux下的信号(signal),我们回想一种场景,当我们在Linux下打开一个终端,假设现在正有一个进程在运行,它的工作就是不断循环输出“hello”,此时,当我们按下Ctrl-c时,这个进程就会被终止掉。在此,我原创 2017-02-27 16:17:33 · 723 阅读 · 0 评论 -
Linux - 使用gdb调试多进程程序
gdb是Linux下一款调试器,常用来调试c/c++代码。对于多进程的程序,gdb是如何进行调试的呢?我们接下来一起学习:方法一:attach pid 利用该命令attach到子进程然后进行调试。为方便调试,可以sleep,这样有充分的时间进行调试。 方法二:gdb wrapper 专用于fork+exec模式,不用添加额外代码,但需要X环境支持(xterm/VNC)。 方法三:follow原创 2017-03-04 16:03:58 · 2025 阅读 · 0 评论 -
可重入函数与线程安全的区别与联系
在了解可重入与线程安全之前,我们需要明确一点,可重入与线程安全是不同的概念。我们以一个例子引入可重入与不可重入:假设现在要往链表中插入一结点,而对于信号的处理也是调用insert函数,在此,insert函数被不同的执行流进入,这称为重入。但insert访问一个全局链表,有可能因为重入导致错误的结果,则insert是不可重入函数。一、可重入函数(Reentrant Function)原创 2017-02-24 12:30:29 · 967 阅读 · 5 评论 -
Linux - find命令讲解
windows是我们使用比较熟悉的一个系统,在windows下,文件是以后缀来区分类型的,而且我们也比较熟悉在该系统下怎样去查找一个文件。由于Linux不像windows那样,可以区分文件,并且关于Linux还有一个说法就是“一切皆文件”,在这样一个系统下工作,我们不可避免的要搜索一些指定类型的文件,那么我们怎样去查找呢?!因此这就是我们今天要解决的问题。一、Linux下的查找命令有:原创 2016-12-28 17:00:58 · 691 阅读 · 0 评论 -
Linux - atime,mtime,ctime以及用touch指令来进行修改
Linux下的文件或目录有三种时间:访问时间(Atime):每当访问这个文件/目录后,Aeecss显示的时间就会更新一次。修改时间(Mtime):当对这个文件进行修改后,Modify显示的时间就更新一次。状态改变时间(Ctime):状态改变时间是指每次用chmod命令改变文件属性后该时间就会更新一次。Linux下的命令stat可以查看这些信息,格式是stat 文件名/目录名原创 2016-12-25 11:14:00 · 5797 阅读 · 0 评论 -
Linux - 如何使用gcc命令生成静态库和动态库
Linux下查看是否有静态库:ar -tv test.a 一、库的简述简单的说,库(Library)是由系统提供的一组具有特定功能的函数的集合,是为提高开发效率和运行效率而设计的。从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。静态库:静态是指每个用到该库的应用程序都会将该库拷贝到自己的目标代码中,因此利用静态库生成的文件比较大。这类库原创 2017-02-18 20:33:24 · 3793 阅读 · 0 评论 -
Linux环境下段错误产生的原因与调试
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。1. 段错误是什么一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内转载 2017-02-20 11:56:20 · 970 阅读 · 0 评论 -
Linux - 进程管理task_struct
·进程概念简单来讲,进程是程序的一个执行实例;是一个正在执行的程序。进程与程序的关系:进程是由程序代码和代码相关联的数据集组成。进程与程序的区别:总得来说:进程是程序加载到内存后,操作系统或给该·PCB即进程控制块(Process Control Block),是进程中的一部分,它描述了进程的基本信息。·task_struct仅原创 2017-01-24 16:23:23 · 780 阅读 · 0 评论 -
Linux - 实现简易进度条
1.背景知识讲解2.如何实现一个简单的进度条开始今天的内容之前,我们先来回顾一个知识,看下面一段代码(Linux下运行程序)对比上边的代码,似乎相差不大,但是运行结果却千差万别:A图代码运行结果---先输出“hello”,停3秒之后程序运行完毕;B图代码运行结果---执行程序后会先停3秒,然后再输出“hello”。原创 2017-01-01 16:11:35 · 2553 阅读 · 0 评论 -
如何编写一个makefile
一个工程中的源文件不计其数,按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为马克覅了就像一个Shell脚本一样其中也可以执行操作系统的的命令。makefile带来的好处就是:“自动化编译”。一旦写好,只需要一个make命令,就可以使整个工程自动编译,极大提高了软件开发的效原创 2017-01-02 11:33:11 · 5669 阅读 · 0 评论 -
Linux - 进程、线程、程序之间的区别与联系
一、进程进程是一个程序的动态运行实例一个正在执行的程序能分配处理器并由处理器执行的实体内核观点:担当分配系统资源(CPU时间,内存)的实体。进程的两个基本元素是程序代码和代码相关联的数据集。进程是一种动态描述,但并不代表所有的进程都在运行。(进程在内存中因策略或调度需求会处于各种状态)二、进程与程序的区别与联系进程是程序的一次动态运行实例,程序是可以被保存的,而进程原创 2017-02-23 11:13:37 · 2216 阅读 · 0 评论 -
I/O多路复用之select
I/O多路复用:I/O多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备就绪后,它就通知该进程的应用程序,应用程序就可以马上完成响应的I/O操作,而不需要等待系统完成I/O操作,这样大大提高了效率。I/O多路复用实质上是实现了单线程来处理并发请求。 系统为我们提供了多个函数来实现多路复用输入/输出模型,例如:select,poll,epoll,这里我们先讲select模型。一、select原创 2017-03-30 16:39:49 · 1262 阅读 · 0 评论