![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 76
blight_888
梦想是注定孤独的旅行,路上少不了质疑和嘲笑,但那又怎么样,哪怕遍体鳞伤,也要活的漂亮。
展开
-
linux下的进程描述符——task_struct
1.进程是什么? 比较官方的说法是说 进程是一个执行实例,正在执行的程序,并能分配处理器并有处理器执行的实体。但是作为初学者我们并不是怎么理解这个概念。所以通俗的来讲就是在正在执行的程序的总称,被打包到一个叫做进程控制块PCB(Process Contral Block)(位于内存)的数据结构和中,它拥有和程序一模一样的代码,而且它还增加了很多的数据结构。同时进程还拥有动态属性。原创 2017-04-15 16:08:34 · 343 阅读 · 0 评论 -
基于socket的Tcp多进程多线程服务器
套接字的概念套接字(socket)这个词在Tcp/Ip协议中,“IP地址”+ “TCP或UDP端口号”唯一标识网络通信中的一个进程,这个“ip地址”+“端口号”就称为socket.预备知识1.在实现我们的服务器之前我们需要 了解一些预备知识。 我们都知道主机有大端和小端之分,那么内存之中存储的数据也就有了大端和小端之分,而通讯双方的主机之间发送数据时因为大端和小端的缘故,发送和接受都需对数据的存储原创 2017-08-03 00:07:28 · 2178 阅读 · 0 评论 -
linux操作系统下的 stat命令
有些时候,我们需要在Linux中使用stat命令来查看文件的详细信息。我们先来看下stat的情况:如图所示,会出现3个类型的时间,分别是Access,Modify,Change。下面我们就对这3个时间进行详细解释下。access time:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间modify time:表示我们最后一次修改文件的时间change tim原创 2017-03-28 12:41:01 · 515 阅读 · 0 评论 -
linux下的粘滞位
1.什么是粘滞位? 如果用户对目录有写权限,即使该用户不是这些文件的所有者,而且也没有读或写许可,仍然可以删除其中的文件和子目录。但是如果设置了粘滞位出现在执行许可的位置上,用t表示,其它用户就不可以删除不属于他的文件和目录。但是该目录下的目录不继承该权限,要再设置才可使用。2.粘滞位的作用又是什么? 普通文件的sticky位会被linux内核忽略, 目录的sti原创 2017-04-02 11:24:57 · 289 阅读 · 0 评论 -
vim学习笔记
安装vim包: sudo apt-get install vim普通用户到超级用户的切换: sudo su退出超级用户:ctrl+d 或者exitvim有三种常用模式:普通模式(默认)、编辑模式、命令行模式。普通模式到编辑模式:i 退回普通模式:esc按键(escape)普通模式到命令行模式用:(冒号) 退回普通模式:esc按键(escape)转载 2016-12-11 15:14:18 · 1832 阅读 · 1 评论 -
多线程编程---线程死锁
什么是死锁?是指多个线程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbreace)即互相等待的现象,当线程处于这种僵持状态时,若无外力作用,它们都将无法向前推进。举个栗子:如果同一个线程先后两次调用lock,在第一次调用时,由于锁已经被占,该线程会挂起等待别的线程释放锁,然而锁正是被自己占着的,该线程又被挂起,没有机会释放锁,因此,就永远处于挂起等待状态了,这叫做死锁(Deadlock)原创 2017-06-15 12:01:04 · 730 阅读 · 0 评论 -
进程间通信总结 && IPC主题三之 共享内存
之前我们已经了解了system V IPC的其他两种通信方式,今天我们来了解第三种—–共享内存一:什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存映射到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言原创 2017-06-14 23:00:55 · 314 阅读 · 0 评论 -
Linux---读者写者模型
一 怎么理解读者写者模型读者写者问题就是在一些程序中,对某些资源的访问会存在两种可能的情况:一种就是写操作,写操作是可以独占资源的,具有排他性;另一种情况就是读操作,在读操作中可以有多个操作并发的去访问某种资源,它的访问方式是共享的。这种从对文件的读写操作中总结出的的这种模型叫做读写者模型。1.读者写者模型的三种关系(1)读者和读者——没有关系; (2)读者和写者——同步和互斥; (3)写者和写原创 2017-06-26 21:14:28 · 1174 阅读 · 0 评论 -
进程间通信IPC 主题一 之 消息队列
这是我们第一接触IPC主题系列先来看看 IPC简介:XSI IPC 包括消息队列,信号量以及共享内存,他们都依托标识符和键来实现的,这就是像是管道靠文件描述符来实现一样。今天我们只了解消息队列。IPC主题一:消息队列 一:什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避原创 2017-06-11 20:42:32 · 352 阅读 · 0 评论 -
进程间通信 IPC 主题二之 信号量
IPC主题二:信号量信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识,信号量在此过程中负责数据操作的互斥,同步等功能。 一:为什么要使用信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域原创 2017-06-13 17:15:00 · 344 阅读 · 0 评论 -
Linux下的生产者消费者模型模型
概念引入 linux下的生产者消费者模型举例说明就像我们在超市买东西,那么我们就是消费者,我们所消费商品的供货商显而易见就是生产者了,而其中将消费者和生产者联系起来的超市就是一个交易场所。将上述场景类比到我们实际的软件开发过程中,代码的某个模块负责生产数据(供货商),而生产出来的数据却不得不交给另一模块(消费者)来对其进行处理,在这之间我们必须要有一个类似上述超市的东西来存储数据(超市),这就抽象原创 2017-06-23 11:32:16 · 445 阅读 · 0 评论 -
Linux 多线程编程(1)
线程的概念是计算机中独立运行的最小单位,运行时占用很少的系统资源。可以把线程看成是操作系统分配CPU时间的基本单元。一个进程可以拥有一个至多个线程。线程在进程内部共享地址空间、打开的文件描述符等资源。同时线程也有其私有的数据信息,包括:线程号、寄存器(程序计数器和堆栈指针)、堆栈、信号掩码、优先级、线程私有存储空间。那可能有的人就会问了,既然我们已经有了进程,为什么还需要线程呢,线程比进程有哪些不可原创 2017-06-06 14:14:45 · 368 阅读 · 0 评论 -
简析文件描述符(fd) 和 FILE结构体的关系
文件描述符(fd) 对于linux而言,所有对设备和文件的操作都使用文件描述符来进行的。文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。 通常情况下,将一个程序从硬盘加载到内存后,这个程序就化身为了一个进程,这时系统会默认打开三个文件:原创 2017-05-21 10:44:10 · 483 阅读 · 0 评论 -
进程间通信 --管道
进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。也就是说两个进程之间是相对独立的,而且是互不干扰没有交集的,进程间通信就是让两个进程之间产生联系。 下面是实现进程间通信的图示实现方法一:原创 2017-06-04 23:23:58 · 247 阅读 · 0 评论 -
模拟实现僵尸进程和孤儿进程
僵尸进程首先解释下什么是僵尸进程? 当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。接下来让我们模拟实现一个僵尸进程 下边是运行结果我们知道僵尸进程的产生是因为进程退出时父进程并没有等待子进程,也就是说,父进程和子进程是不同步的。那么有个问题,父进程是不会预测到子进程退出的原创 2017-05-07 14:53:45 · 354 阅读 · 0 评论 -
Linux环境下注册函数的调用顺序
为了验证atexit()函数在Linux环境下的调用顺序,我们先来写四个fun函数,这样而且每个函数里边加一句话,这样我们就能更加清晰的在屏幕上看到 各个函数的调用顺序了。下边我们直接看代码。 这个是运行结果: 过程分析: atexit函数先注册四个fun函数然后等待3秒,再打印hello main (如果main函数中不加\n 则main函数要输出的内容会先放到标准输出的缓冲区中,当ma原创 2017-05-07 10:43:22 · 729 阅读 · 0 评论 -
模拟实现select服务器
什么是I/O多路转接?对于多个非阻塞I/O,怎么知道I/O何时已经处于可读或可写状态? 如果采用循环一直调用write/read,直到返回成功,这样的方式称为轮询(polling)。大多数时间I/O没有处于就绪状态,因此这样的轮询十分浪费CPU。而一种比较好的技术是使用I/O多路转接,也叫做I/O多路复用。其基本思想为:先构造一个有关描述符的列表,然后调用一个函数,直到这些描述符中的一个已经准备好原创 2017-08-03 21:15:48 · 384 阅读 · 0 评论