Linux
文章平均质量分 71
qduningning
这个作者很懒,什么都没留下…
展开
-
Mutex和Semaphore区别
理解Semaphore和Mutex网摘1:Mutex 的发音是 /mjuteks/ ,其含义为互斥(体),这个词是Mutual Exclude的缩写。Mutex在计算机中是互斥也就是排他持有的一种方式,和信号量-Semaphore有可以对比之处。有人做过如下类比: * Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行转载 2012-09-27 13:16:26 · 5835 阅读 · 0 评论 -
进程间通信——管道
管道是Linux系统中最古老的进程间通信(IPC,InterProcess Communication)手段,它把一个程序的输出直接连接到另一个程序的输出。1.无名管道无名管道是Linux中管道通信的一种原始方法。特点它只能用于具有亲缘关系的进程之间的通信它是一个半双工的通信模式,它具有固定的读端和写端管道也可以看做一种特殊的文件,对他的读写也可以直接使用普通的read()原创 2012-09-16 20:32:55 · 6136 阅读 · 0 评论 -
详解僵尸状态(EXIT_ZOMBLE)
1. 产生原因:进程运行结束,父进程尚未使用wait函数族等来收尸,即等待父进程销毁它。那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程原创 2012-09-16 09:29:23 · 8661 阅读 · 0 评论 -
exit和_exit
exit和_exit函数都是用来终止进程的,当执行exit()和_exit()时,进程会无条件的停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两个函数还是有区别的。_exit()函数的作用是,直接使进程停止运行,清除其使用的内存,并清除其内核中的各种数据结构;exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。exit和_exit函数最大的区别是exi原创 2012-09-16 10:18:16 · 5466 阅读 · 0 评论 -
孤儿进程
如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程。而一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。子进程执行exit后:1.如果父进程已经退出(没有wait),则该子进程将会成为孤儿进程过继给init进程 2.如果其父进程还没有退出,也没有原创 2012-09-16 09:46:16 · 5950 阅读 · 0 评论 -
写时复制
写时复制技术最初产生于Unix系统,用于实现一种傻瓜式的进程创建:当发出fork( )系统调用时,内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程。这种行为是非常耗时的,因为它需要: · 为子进程的页表分配页面 · 为子进程的页分配页面 · 初始化子进程的页表 · 把父进程的页复制到子进程相应的页中 创建一个转载 2012-09-16 08:52:37 · 5565 阅读 · 0 评论 -
Linux信号列表
我们运行如下命令,可看到Linux支持的信号列表:$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSE转载 2012-09-13 17:19:04 · 6386 阅读 · 0 评论 -
VFS的索引节点 链接
文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在。VFS索引节点的数据结构inode在/includ/fs/fs.h中定义如下(2.4.x版本) 当一个文件系统被格式化成ext2或者ext3的时候,就会产生Inode number。 1、用ls -i命令来查看文件系统对象的索引节点号 $ ls原创 2012-09-11 09:33:38 · 5780 阅读 · 0 评论 -
编写自己的Shell解释器
编写自己的Shell解释器摘要:本期的目的是向大家介绍shell的概念和基本原理,并且在此基础上动手做一个简单shell解释器。同时,还将就用到的一些 linux环境编程的知识做一定讲解。本文适合的读者对象 对linux环境上的c语言开发有一定经验;对linux环境编程(比如进程、管道)有一点了解。概述本章的目的是带大家了解shell的基本原理,并且自己动手转载 2012-09-13 12:30:35 · 5568 阅读 · 0 评论 -
pthread_cond_wait()分析
/************pthread_cond_wait()的使用方法**********/ pthread_mutex_lock(&qlock); pthread_cond_wait(&qready, &qlock); pthread_mutex_unlock(&qlock);/************************************转载 2012-09-13 10:54:26 · 5311 阅读 · 0 评论 -
关于Readline函数
简介Readline 是一个强大的库,只要使用了它的程序,都可以用同一个配置文件配置,而且用同样的方法操作命令行,让你可以方便的编辑命令行。 使用 readline 的程序现在主要有 Bash, GDB,ftp 等。readline 付予这些程序强大的 Emacs 似的命令行编辑方式,你可以随意绑定你的键盘。测试程序test.c#include ;#include原创 2012-09-13 12:46:25 · 6299 阅读 · 0 评论 -
exec运行shell语句
用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程完全由新程序代换。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。#include extern char **environ; int execl(const char *path, const char *arg, ..原创 2012-09-12 11:57:52 · 6090 阅读 · 0 评论 -
linux 文件描述符表 打开文件表 inode
在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版中仅定义为256)。每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件位置。每次打开一个文件,除非明确要求,否则文件转载 2012-09-11 17:08:51 · 5934 阅读 · 0 评论 -
fork,vfork
第一点,Linux中,创建进程的方式,只有一种,那就是调用fork(或者vfork)。 当然,系统的交换进程(0),init进程(1)除外,它们是操作系统自举时用特殊方式创建的最初的进程。第二点,举个例子,父进程A 创建子进程B 后,进程B 就拥有了A 的所有数据(包括父进程的数据空间、堆和栈)的相同副本,并且共享代码片段(正文段)。父子进程的运行路线仅靠fork的返回值来区分转载 2012-09-11 14:44:17 · 5644 阅读 · 0 评论 -
LDD3源码分析之poll分析
LDD3源码路径:examples/scull/pipe.c examples/scull/main.c本文分析LDD3第6章的poll(轮询)操作。要理解驱动程序中poll函数的作用和实现,必须先理解用户空间中poll和select函数的用法。本文与前面的文章介绍的顺序有所不同,首先分析测试程序,以此理解用户空间中的poll和select函数的用法。然后再分析驱动程序怎样对用户转载 2013-07-18 16:17:47 · 734 阅读 · 0 评论