博客统计信息

用户名:可人
文章数:36
评论数:48
访问量:47143
无忧币:20
博客积分:318
博客等级:3
注册日期:2009-04-01

POSIX基本的几个线程管理函数见下表:
------------------------------------------------------------------------------------------
                     POSIX函数                                       &nbs..
2009-07-06 19:46:31
1. 信号掩码——被阻塞的信号集
每个进程都有一个用来描述哪些信号传送来将被阻塞的信号集,如果某种信号在某个进程的阻塞信号集中,则传送到该进程的此种信号将会被阻塞。当前被进程阻塞的信号集也叫信号掩码,类型为sigset_t。每个进程都有自己的信号掩码,且创建子进程时,子进程会继承父进程的信号掩码。
 
2. 信号阻塞和忽略的区别
阻塞的概念与忽略信号是不同的:操作系统在信号被进程解除阻塞之前不会将信号传递出去,被阻塞的信号也不会影响进程的行为,信号只是暂时被阻止传递;当进程忽略一个信号时,信号会被传递..
2009-06-30 22:58:24
在前面一篇文章《shell管道重定向程序的实现》里面已经大致讲过管道重定向的实现。例如ls | sort 或者ls -l | less等命令,都是可以通过管道重定向来实现的,管道就可以看作2个进程之间的缓冲区,允许2个进程以不同的速度进行读写操作,而read和write的阻塞性本质有效的同步了进程。
 
这里省略代码(可参见《shell管道重定向程序的实现》)。对照流程图-1几个关键步骤,结合近期所提到的“文件描述符表”等知识,用图2-4来表示ls-l| more的过程。

                                                 图 1
 
『1』pipe()创建管道、fork()创建子进程

                                                图 2
这里,0-1-2分别表示标准输入,标准输出,标准错误。先创建管道,再由fork创建子进程,这里子进程是完全继承父进程的文件描述符表。
 
『2』父进程和子进程分别执行dup2()

                                                图 3
重定向以后,父进程的标准输入来自管道,子进程的标准输出到管道。也就是将父进程的文件描述符[3]处的指针拷贝到[0]对应的条目处;将子进程的文件描述符4处的指针拷贝到[1]对应的条目处。
 
『3』各自调用close以后
UNIX目录中有2中类型的链接——硬链接和符号链接。
 
硬链接本身就是一个目录项,(比如文件名+索引节点号),可以将文件名与文件的位置关联起来;
符号链接也称软链接,是指存储了一个字符串的文件。这个字符串可以在路径名解析的过程中,用于修改路径名。
 
----------------------------------------------------
  假设文件是用索引节点来表示的
----------------------------------------------------
 
目录项对应于单个链接,但是一个索引节点可能有几个链接的目标(对应几个目录项),因此索引节..
POSIX没有强制磁盘上的文件采取任何特定的表示方法,但是传统的UNIX文件都是按照改进的树状结构来实现的。目录项中包含一个文件名 和一个定长结构的引用(索引节点)。索引节点包含与文件长度、文件位置、文件所有者、创建时间、最后访问时间、最后修改时间、文件权限有关的信息。如图1所示:

                                                                  图 1
 
除了基本信息,还包含指向文件中前几个数据块的指针。如果文件很大,就需要使用到间接指针了。
 
单级间接指针是一个指向指针块的指针,而指针块中的指针是指向附加数据块的;
二级间接指针是一个执行间接知真块的指针;
三级间接指针块包含了一个指向二级间接指针块的指针。
 
举例:
假设一个索引节点占用128字节,状态信息占用68字节,指针为四字节长,一个块的长度是8K字节,每个块指针为32bit。根据以上信息,可以计算
(1)直接指针的个数为:
(128-68-4×3)字节/4字节=12个
 
(2)指针指针可直接表示的文件大小:
12×8×1024=98304字节
 
(3)一级间接指针指向一个块大小为8K字节,8K字节的指针块包含指针个数可以为2K个,每个指针对应数据块大小为8K字节,这样一级间接指针可表示文件大小为:
2×1024×8×1024=16M字节
 
(4)同理,二级间接索引可表示文件大小为:
2K×2K×8K = 32吉字节。。。。
 
 [/img]..
2009-06-29 16:40:33
在前一面一篇《UNIX I/O---再谈文件描述符 》的基础上,学习一下dup2函数。先看下面的代码示例:
 
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc,char* argv[])
{
 int fd;
  fd = open("my.file",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
 if(fd == -1)
 {
  perror("\nERROR: fail to creat my.file.");
  return -1; 
 }
 
 if(dup2(fd,STDOUT_F..
在C程序中,文件由文件指针或者文件描述符表示。ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文件描述符。下面重点来说下,文件描述符是如何工作的。
 
文件描述符相当于一个逻辑句柄,而open,close等函数则是将文件或者物理设备与句柄相关联。句柄是一个整数,可以理解为进程特定的文件描述符表的索引。先介绍下面三个概念,后面讲下open、close等操作以后,文件和文件描述符产生什么关系,以及fork后文件描述符的继承等问题..
2009-06-27 22:11:12
一个大好的周末,感觉好烦啊。
 
我也不知道这个烦到底是因何而起的。起初只是行里一个很不错的外企近期招聘,斗争了半天想去试试的,斗争是因为觉得自己实在是差距太大,斗争到最后放弃想法是因为仔细看了下要求,工作年限一关直接就过不了海选。
 
我不是因为这个问题而郁闷的,而是抛开这个事实想了些乱七八糟的东西,想的郁闷了。首先是想做个简历吧,做个简历也是个总结的过程,至少可以想起自己会什么,欠缺什么,或者发现自己原来什么都不会,心虚一下去继续自己的学习。可是写了点基本信息,就是在无法进行了。..
 <<   1   2   3   4   5   >>   页数 ( 1/5 )

我最近发表的评论

突然觉得做研发挺.. 回复
我们都还是比较适合那个看似相对单..
工作--何去何从(.. 回复
加油~
工作六年 回复
一直坚持写博客,不容易哇。我早丢了。
新员工的烦恼(五.. 回复
加油了。没想到你一直还在写这个博..
外场质量事故不断.. 回复
最近很高产耶 加油