
Linux
夏夕阳
这个作者很懒,什么都没留下…
展开
-
Linux中进入目录和显示文件所需要的权限
1.在Linux下进入一个目录需要怎样的权限呢?我们先创建一个权限为 000 的文件夹进入该文件夹发现权限不够,不能进入给文件夹所有者加上读权限发现还是不能进入,提示权限不够给所有者去掉读权限加上写权限,发现还是不能进入给所有者去掉写权限,加上执行权限,发现可以顺利进入该文件夹2.在Linux下需要原创 2017-03-19 21:40:24 · 7152 阅读 · 0 评论 -
Linux信号捕捉
内核是怎样实现信号的捕捉呢?处理流程如下图所示:系统往往在从内核态切回用户态时会进行信号的处理。信号捕捉函数:sighandler_t signal(int signum, sighandler_t handler);int sigaction(int signo, struct sigacton *act, struct sigaction* oact);原创 2017-06-09 15:28:36 · 645 阅读 · 0 评论 -
死锁概述
什么是死锁?把多个进程因抢占资源,或者彼此间通信造成的一种僵局,在没有外力推动的作用下进程不能继续运行下去的这种状态称为死锁。比如,有两个进程p1和p2,他们准备写两个文件f1和f2,两个进程并发运行:如果p1先打开f1和f2,然后p2才去打开f1和f2,这时文件也已经被打开,p2会被阻塞。当p1完成写入时而关闭f1和f2,此时p2会有阻塞状态转为就绪状态,会重新去打开f1和f原创 2017-06-09 15:39:34 · 421 阅读 · 0 评论 -
守护进程
什么是守护进程:守护进程是运行在系统后台的一种特殊程序,独立于控制终端并且周期性的执行某种任务或者等待处理某些发生的事件。守护进程也称为精灵进程,有以下特点:自成进程组,自成会话,不受一般用户注销影响在命名上一般以d结尾其本身是一个孤儿进程生命周期长,要7*24小时在线一般的网络服务器必须以守护进程的形式存在守护进程的创建:创建守护进程的关键就是创建一个新的Sess原创 2017-06-15 23:51:15 · 617 阅读 · 0 评论 -
Linux子进程的异步等待方式(SIGCHLD信号)
当一个父进程创建一个子进程时,最好要调用wait或者waitpid函数等待子进程,不然会产生僵尸进程造成是内存泄漏的问题。一般父进程在等待子进程时有两种方式等待,一种是阻塞式等待,这时父进程不能处理自己的工作;另一种是以非阻塞式等待,父进程吃力自己工作的同时,要定时去查看有没有子进程等待清理。我们可不可以实现更加高效的方法,让父进程在子进程退出后马上去回收,也不用去阻塞等待或者定时查看有没有子原创 2017-06-11 11:22:31 · 1547 阅读 · 0 评论 -
一个进程为什么会默认打开三个标准输入输出
这其中涉及到终端登录的问题,先对终端登录进行小总结:init在创建子进程后,子进程一直进行程序替换完成必须的处理动作,最后替换到bash,也就是我们所工作的环境,所以也就解释bash的父进程就是init,init为什么是1号进程。从getty开始exec到login,再exec到bash,其实都是同一个进程,因此控制 终端没变,文件描述符0、1、2也仍然指向控制终端。由于fork会原创 2017-06-11 23:05:07 · 1670 阅读 · 0 评论 -
线程安全和可重入函数
线程安全:一个函数被称为线程安全的,当且仅当被多个进程反复调用时,它会一直产生正确的结果。有四类函数称为线程不安全函数:不保护共享变量的函数函数状态随着调用改变的函数返回指向静态变量指针的函数调用线程不安全函数的函数要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区和堆,而私有的线程空间则主要包括栈和寄存器。因此,原创 2017-06-13 11:12:39 · 992 阅读 · 0 评论 -
使用套接字实现简单TCP服务器客户端模型
利用套接字实现一个简单的服务器客户端模型基本步骤如下:1.创建套接字#include #include int socket(int domain, int type, int protocol);参数描述: domian:协议域,AF_INET ipv4, AF_INET6 ipv6, AF_UNIX 表示这个socket原创 2017-07-04 10:23:55 · 970 阅读 · 0 评论 -
实现简单UDP服务器客户端模型
UDP是无连接的,在数据的发送之前不需要连接,只需要知道要发数据给谁,然后将数据发出即可,可以直接接收到其他人发来的数据,不必调用listen()和accept()函数。所以UDP中建立好套接字后,就可以直接进行数据的传输。基于UDP的接收和发送函数:#include #include ssize_t sendto(int sockfd, const void *buf,原创 2017-07-04 16:51:31 · 1046 阅读 · 0 评论 -
Linux信号
当我们在终端运行这样的程序时#includeint main(){ int count = 0; while(1) { sleep(1); printf("%d\n", count++); }}我们可以看到每隔一秒会将count++然后输出到显示器,但是这个时候要结束掉这个进程该怎样做呢?很简单,我们可以使用Ctrl+c组合键来直接结原创 2017-06-06 18:54:34 · 396 阅读 · 0 评论 -
Linux消息队列实现进程间通信
什么是消息队列:消息队列提供了从一个进程向另一个进程发送一个有类型数据块的方法。用这种方法可以避免命名管道的同步和阻塞问题。消息队列是基于消息的,而管道是基于字节流的,并且消息队列的读取不一定是先入先出。消息队列的操作:消息队列的创建或者获取:int msgget(key_t key, int msgflg);参数描述:key:是一个端口号,可以由ftok()生成原创 2017-06-02 23:58:53 · 2244 阅读 · 0 评论 -
Linux共享内存实现进程间通信
原理图:通过在物理地址上开辟出一块内存,通过页表建立多个进程的虚拟内存与这块内存的映射让进程可以访问这块空间,映射一旦建立就相当于自己拥有了这块内存。特点:通信速度快;生命周期随内核;不带任何同步机制,所以常常和信号量一块使用。共享内存的操作:创建:int shmget(key_t key, size_t size, int shmflg);原创 2017-06-03 00:53:23 · 543 阅读 · 0 评论 -
Linux下文件的atiem,mtime,ctime详解
在Linux下,文件都有自己的三个时间信息,我们可以通过 stat [文件名] 来查看J原创 2017-03-20 12:38:38 · 526 阅读 · 0 评论 -
Linux下设置粘滞位防止其他用户删除当前用户文件
通常有这样的情况,有多个用户需要向一个文件夹内放置文件,但是他们不能互相删除对方的文件,设置用户权限可以实现么?用root用户创建一个文件夹,给以777的权限然后在这个文件夹下面创建一个文件test发现它的权限为644切换到普通用户,进入file文件夹,对于普通用户来说test文件权限是只读的,却发现普通用户可以删除test文件我们可以通过设原创 2017-03-28 15:25:10 · 2408 阅读 · 0 评论 -
Linux的find命令
Linux下find命令具有强大的查找功能,它可以完成各种情况的查找工作,所以find命令有很多选项。【命令功能】 用于在文件数中查找文件,并做出相应的处理(可能访问磁盘)【命令格式】 find pathname -options [-print -exec -ok ......]【命令参数】 pathname : find 命令所查找的目录原创 2017-03-28 14:58:17 · 2219 阅读 · 0 评论 -
Linux之线程的创建、等待、终止及分离
线程概念:线程是在进程内部运行的(也就是在进程的地址空间内运行的),是进程的一个执行分支。线程与进程的区别:Linux下线程是在进程的地址空间内运行的,线程拥有进程的一部分资源与代码,是进程的一个执行分支线程是cpu的基本调度单位进程是承担资源分配的基本单位Linux下进程被称为轻量级进程Linux下无真正意义的线程,线程是用进程模拟实现的线程之间有共享的资源:原创 2017-05-30 01:55:16 · 1031 阅读 · 0 评论 -
Linux利用mutex互斥锁实现线程的互斥
在多个线程对共享数据进行处理时,可能会发生冲突从而导致数据结果与预期结果不一样,导致程序运行错误。例:在一个主线程中有两个线程,这两个线程都对全局变量num进行+1操作。注意:上述说的例子可能不会发生,只有当线程1还未将num的新值写入内存时突然被切换到线程2才可能发生。 线程间的切换会在系统由内核态切换到用户态时可能发生。系统在运行系统调用时会原创 2017-05-30 17:28:52 · 2047 阅读 · 0 评论 -
Liunx线程的同步
什么是线程间的同步:对于可以处理同一公共资源的线程来说他们必须是互斥的,这样才能保证数据的正确性。可是就这一种关系仍然不能处理好这些线程之间的问题。比如,两个线程可以访问同一块缓冲区,线程1可以往里面写数据,线程2可以从中读数据,要是数据远远大于缓冲区的大小时,这时当线程1写满缓冲区时,就不能在写入了,必须等到线程2去读掉缓冲区的数据之后才能在写入。所以最好的做法就是在线程1写满时,去通知原创 2017-05-31 12:29:45 · 351 阅读 · 0 评论 -
Linux利用信号量实现线程的同步与互斥
线程使用互斥锁可以实现线程间的互斥,而互斥锁本身就是对资源的一种标识状态,当可以申请到锁时说明此时资源可以使用,当申请锁失败时说明资源此时被其他线程所占用不可使用,我们可以使用信号量来代替互斥锁实现。信号量用来表示资源数目,当一个线程要去访问资源时,必须先去申请信号量,如果可以获取到信号量那么该线程就可以正常运行,如果获取资源失败那么就需要去等待。当一个线程获取到信号量并且执行完成后必须去原创 2017-06-01 12:21:27 · 2736 阅读 · 2 评论 -
Linux利用管道实现进程间通信
系统中,进程之间独立性大,互相的影响较小,所以造成进城之间相互通信的难度较大。所在想办法让进程去看到一份相同的公共资源(一般操作系统提供,这资源不属于任何进程),以这样的方式实现进程的通信。用管道实现进程间通信的原理:如下图所示匿名管道(pipe)【匿名管道的创建】int pipe(fd[2]);这是一个系统调用接口,创建一个匿名管道文件。【函数具体原创 2017-05-18 16:34:25 · 1422 阅读 · 0 评论 -
Linux信号量
【信号量】本质:信号量本质就是一个计数器,用于统计临界资源数目的计数器,信号量是用来调协进程 对共享资源的访问。【信号量的工作原理 】由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行。V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有原创 2017-06-02 17:02:26 · 708 阅读 · 1 评论 -
I/O多路转接之select
在完成I/O操作时,程序中完成真正I/O的时间可能只有少的一部分,而大部分时间都处于一个等的时间。比如,此时需要从一个套接字中读取数据read(socket, buf, BUFSIZE); 这个操作可能会一直阻塞,直到有数据从网络的另一端发送过来。等的时间过于长,这是I/O效率低下的真正原因。可能有人会提出让代码不要阻塞的等,可以进行非阻塞的等待,比如当read一个socket发现没有数据时,就不原创 2017-07-09 23:14:09 · 576 阅读 · 0 评论