- 博客(14)
- 收藏
- 关注
原创 卸载挂载点失败时获取字符串的问题
到目前为止,我使用了四种方式卸载挂载点。第一种是使用system函数,但是没法获取umount失败时的字符串,比如说device is busy。第二种方式是使用系统函数umount,虽然可以得到设备忙的错误码,但是不能清楚系统文件/etc/mtab的记录。第三种方式是使用popen函数(参数1是“umount /mnt/wzhwho”,参数2是“r”),但是卸载挂载点失败时还是不能获取到字符串。
2009-03-15 15:58:00 1020
原创 进程通信之共享内存
1. 共享内存1.1. 共享内存共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式。共享内存允许两个不相关的进程访问同一个逻辑内存。由于它并没有提供同步机制,所以我们通常需要用其他的机制来同步访问共享的内存。共享内存是由IPC为进程创建的一个特殊的地址范围,它将出现在该进程的地址空间中。其他进程可以将同一段共享内存连接到它们自己的地址空间中。所有进程都可以访问共享内存的数据
2009-03-15 15:47:00 1862
原创 进程通信之信号量
1. 信号量1.1. 信号量信号量(semaphore)是一个计数器,用户多进程对共享数据对象的访问,也就是用户管理对资源的访问。为了获得共享资源,进程需要执行下列操作。1). 测试控制该资源的信号量;2). 若此信号量的值为正,则进程可以使用该资源。进程将信号量减一,表示它使用了一个资源单位。3). 若此信号量的值为0,则进程进入休眠状态,直至信号量值大于0。进程被
2009-03-15 12:22:00 1850
转载 七个顶级心理预言(触及你心灵深处)
1. 成长的寓言:做一棵永远成长的苹果树一棵苹果树,终于结果了。 第一年,它结了10个苹果,9个被拿走,自己得到1个。对此,苹果树愤愤不平,于是自断经脉,拒绝成长。第二年,它结了5个苹果,4个被拿走,自己得到1个。"哈哈,去年我得到了10%,今年得到20%!翻了一番。"这棵苹果树心理平衡了。 但是,它还可以这样:继续成长。譬如,第二年,它结了100个果子,被拿走90个,自己得到10个。
2009-03-14 22:56:00 778
原创 进程通信之消息队列
1. 消息队列1.1消息队列消息队列是消息的链接表,存放着内核中由消息队列标识符标识。消息队列简称队列(queue),其标识符为队列ID(queue ID)。每个队列都有一个msqid_ds结构与其相关联:struct msqid_ds{struct ipc_perm msg_perm; //msgqnum_t msg_qnum; // # of messa
2009-03-14 15:32:00 1856
原创 进程通信之XSI IPC
1. XSI IPC1.1 标识符和键有三种IPC称为XSI IPC,即消息队列,信号量以及共享存储器。每个内核中的IPC结构(消息队列,信号量和共享存储器)都用一个非负整数的标识符(identifier)加以引用。例如,为了对一个消息队列发送消息或取消息,只需知道其队列标识符。当一个IPC结构被创建,以后又被删除时,与这种结构相关的标识符连续加1,直至达到一个整型数的最大值,然后又回
2009-03-14 15:21:00 1597
原创 进程通信之命名管道(FIFO)
1. FIFOFIFO也被称为命名管道。管道只能由相关进程使用,这些相关进程的共同的祖先进程创建了管道。创建FIFO类似于创建文件。确实,FIFO的路径名存在于文件系统中。#include int mkfifo(const char *pathname, mode_t mode);mkfifo函数中mode参数的规格说明与open函数的mode相同。新FIFO的用户和组的所有权规则
2009-03-14 15:17:00 1011
原创 进程通信之协同进程
1. 协同进程当一个程序产生某个过滤程序的输入,同时又读取该过滤程序的输出时,则该过滤程序就成为协同进程(coprocess)。Korn shell提供了协同进程。Bourne shell,Bourne-again shell和C shell没有提供协同进程方式将进程连接起来。 函数popen只提供链接到另一个进程的标准输入或标准输出的一个单向管道,而对于协同进程则它有链接到另一个进程
2009-03-14 15:14:00 1590
原创 进程通信之管道(续)
1.3. popen和pclose函数标准I/O库提供了两个函数popen和pclose。这两个函数实现的操作是:创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell以运行命令,然后等待命令终止。#include FILE * popen(const char *cmdstring, const char *type);Int pclose(FILE *
2009-03-14 15:05:00 793
原创 进程通信之管道
1. 管道1.1管道管道是UNIX系统IPC的最古老的形式。有下面两种局限性:1). 历史上,它们是半双工的(即数据只能在一个方向上流动)。现在,某些系统支持全双工管道,但是为了最佳的可移植性,决不预先假定系统提供此特性2). 它们只能在具有公共祖先的进程间使用。通常,一个管道由一个进程创建,然后进程调用fork,此后父、子进程间就有可应用该管道。FIFO没有第二种局限性,套接
2009-03-14 14:53:00 911
原创 进程关系之shell执行程序
1. shell执行程序1.1. 登录shell(Bourne shell)首先使用不支持作业控制的Bourne shell。如果我们执行命令:#ps -o pid,ppid,pgid,sid,comm# ps -o pid,ppid,pgid,sid,comm &(后台执行)两种结果都差不多,只是进程ID不一样:PID
2009-03-07 11:03:00 1790 1
原创 进程关系之作业控制(孤儿进程组)
1. 作业控制作业控制是BSD在1980年增加的一个特性。一个作业只是几个进程的集合。作业控制要求以下三种形式的支持:1). 支持作业控制的shell(C shell支持,Bourne shell不支持,而Korn shell视情况)。2). 内核中的终端驱动程序必须支持作业控制。3). 内核必须提供对某些作业控制信号的支持。三个特殊字符可使终端驱动程序产生信号:1). 中
2009-03-07 10:57:00 1468
原创 进程关系之进程组、会话和控制终端
1. 进程组每个进程除了有一个进程ID之外,还有一个进程组。进程组是一个或多个进程的集合。它们与同一作业相关联,可以接受来自同一终端的各种信号。每个进程组都有唯一的进程组ID。函数getpgrp可以得到进程的进程组ID。pid_t getpgrp(void);每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于进程ID。组长进程可以创建一个进程组,创建该组中的进程,
2009-03-07 10:38:00 5720
原创 进程关系之终端登录
1. 终端登录终端登录要么是本地的要么是远程的。在这两种情况下,登录都要经由内核中的终端设备驱动程序。终端登录至UNIX系统。该过程是类似的,而与所使用的终端无关,终端可以是基于字符的终端、仿真简单的基于字符终端的图形终端,或者是运行窗口系统的图形界面。 1.1. BSD终端登录系统管理员创建名为/etc/ttys的文件,其中每个终端设备都有一行,每一行说明了设备名和传递给gett
2009-03-07 10:35:00 1194
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人