huiwh
POSIX基本的几个线程管理函数见下表: ------------------------------------------------------------------------------------------ &n
1. 信号掩码——被阻塞的信号集 每个进程都有一个用来描述哪些信号传送来将被阻塞的信号集,如果某种信号在某个进程的阻塞信号集中,则传送到该进程的此种信号将会被阻塞。当前被进程阻塞的信号集也叫信号掩码,类型为sigset_t。每个进程都有自己的信号掩码,且创建子进程时,子进程会继承父进程的信号掩码。 2. 信号阻塞和忽略的区别 阻塞的概念与忽略信号是不同的:操作系统在信号被进程
在前面一篇文章《shell管道重定向程序的实现》里面已经大致讲过管道重定向的实现。例如ls | sort 或者ls -l | less等命令,都是可以通过管道重定向来实现的,管道就可以看作2个进程之间的缓冲区,允许2个进程以不同的速度进行读写操作,而read和write的阻塞性本质有效的同步了进程。 这里省略代码(可参见《shell管道重定向程序的实现》)。对照流程图-1几个关键
UNIX目录中有2中类型的链接——硬链接和符号链接。 硬链接本身就是一个目录项,(比如文件名+索引节点号),可以将文件名与文件的位置关联起来; 符号链接也称软链接,是指存储了一个字符串的文件。这个字符串可以在路径名解析的过程中,用于修改路径名。 ---------------------------------------------------- &nbs
POSIX没有强制磁盘上的文件采取任何特定的表示方法,但是传统的UNIX文件都是按照改进的树状结构来实现的。目录项中包含一个文件名 和一个定长结构的引用(索引节点)。索引节点包含与文件长度、文件位置、文件所有者、创建时间、最后访问时间、最后修改时间、文件权限有关的信息。如图1所示: &
在前一面一篇《UNIX I/O---再谈文件描述符 》的基础上,学习一下dup2函数。先看下面的代码示例: #include <stdio.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h> int main(int argc,char* argv[]){&nb
在C程序中,文件由文件指针或者文件描述符表示。ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文件描述符。下面重点来说下,文件描述符是如何工作的。 文件描述符相当于一个逻辑句柄,而open,close等
一个大好的周末,感觉好烦啊。 我也不知道这个烦到底是因何而起的。起初只是行里一个很不错的外企近期招聘,斗争了半天想去试试的,斗争是因为觉得自己实在是差距太大,斗争到最后放弃想法是因为仔细看了下要求,工作年限一关直接就过不了海选。 我不是因为这个问题而郁闷的,而是抛开这个事实想了些乱七八糟的东西,想的郁闷了。首先是想做个简历吧,做个简历也是个总结的过程,至少可以想
接着介绍命令吧。 (7)写文件:w命令gaolu@gaolu-desktop:~$ sed -n '/100/w newfile1' datafile -----将包含模式100的行写到文件newfile1内,取消打印。这样执行命令以后通过显示newfile1的内容可以看到存在2行。 gaolu@gaolu-desktop:~$ cat newfile1William
sed是一种能够执行与VI相同功能的编辑器,特点如下:不提供交互式的使用方式,只能在命令行输入命令、指定文件名,并在屏幕上查看输出;另外它没有破坏性,不会修改原文件,所有修改在模式空间内部进行,结果打印到屏幕,除非使用shell重定向来保存输出结果。 1. sed如何工作:sed逐行处理输入文件,并将输出结果发送到屏幕。具体过程:将当前行读入到模式空间(一个临时缓冲区);在该行上
Problem Description 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!什么问题?他研究的问题是蟠桃一共有多少个!不过,到最后,他还是没能解决这个难题,呵呵^-^当时的情况是这样的:第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第
Problem Description: 给定一个日期,输出这个日期是该年的第几天。 Input: 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。 Output: 对于每组输入数据,输出一行,表示该日期是该年的第几天。 Sample Input: 1985/1/20 2006/3/12
Problem Description 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。 Input 输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。 Output 对于每组输入数据,输出一个平均值序列,每组输出占一行。 Sam
Problem Description The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified
看了一点Ellie Quigley的《UNIX Shell 范例精解》,学了一点正则表达式入门的知识。总结一下: 正则表达式是一种字符模式,用于在查找过程中匹配相同的字符。在大多数程序里,正则表达式都被扩在2个正斜杠“/”之间。 (1)正则表达式元字符 ------------------------------------------------------
一晃毕业已经整整一年了,记得我还在学校的时候,曾经想过如果到了工作那一天,我一定会每天都很努力。因为在学校的最后2年我过的太堕落了,那种落后的感觉和被人鄙视的滋味让人很害怕。 可是现在呢,不到一年的时间,我觉得我又变了,不知道是成熟了还是学坏了。怎么说的,现在的公司就是很重视加班的,我第一次工作当新员工,还不知道是不是所有的公司都这样,加班时间长短和考核是有关系的,也是体现一个人
今天在这里申请了博客,搞了半天把最近几个学习笔记转移过来了,不知道因为什么,明天就是我报到到现在整整一年的日子,纪念一下?还是因为觉得自己最近学习的脚步有些走不动了,来这里寻找学习的气氛呢? 或许就是想制造一个纯净的空间吧,完全是关于学习的东西,工作之余的一些感想,让自己时刻都能感受到那么一种浓浓的气氛,积极、向上、坚持学习、时刻看到自己与高手的距离吧。 去年的
【代码】 申请一个共享内存区,attach到进程当中,然后通过fork创建子进程。理论上子进程和父进程是各自有在自己的内存空间,对变量的修改互不影响的,但是共享内存中的数据由子进程修改以后,父进程可以得知。 #include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys
【简介】 信号量用于解决2个或者多个进程访问共享资源的问题。 几个主要函数: (1)int semget(key_t key,int nsems,int flag); 信号量和消息队列、共享内存都是需要先通过ftok获得一个key,再用对应的函数进行创建,返回IPC标识符。nsems表示信号量集合中的信号个数,flag为可选参数。函数执行失败返回负1. (2)int &nbs
使用信号和管道传递消息存在一定的限制:信号传递的消息有限,管道虽然可以传输一定量的信息,但是只能传递无格式的字节流。3种新的进程间通信(IPC)机制---消息队列、信号量、共享内存,可以解决这些问题。这些机制最早出现在UNIX中,被编入POSIC:XSI中,Linux支持POSIX标准。 (1)关于IPC资源 消息队列、信号量、共享内存都是IPC资源,这些资源在使用之前都需要先
管道常用于不同命令的组合使用,比如ps -aux|grep ..用于查找指定条件的进程,ls|less用于实现文件列表的分页显示等。总之是将前一个命令的输出作为后一个命令的输入,完成一个命令无法完成的功能。 分别使用pipe()和popen()两种方式实现ls|less(ls|more)的功能。 gaolu@gaolu-desktop:~/test_folder$ ls |le
文件锁、信号等进程通信方法无法实现在进程见传递大量数据,如果使用文件锁,进程见信息的传递将受到磁盘读取速度的限制。管道作为最早的进程间通信机制,实现了父子进程或者兄弟进程之间的数据读写。 Linux系统中的管道都是半双工的,所以要实现双工通信就需要创建2个管道来完成了;某些UNIX版本的管道是全双工的。由于管道只能在父子进程或者兄弟进程之间创建,非父子、兄弟进程之间的通信可以用命
信号是进程之间通信的另外一种方式。之前用过kill -l看了Linux系统支持的所有信号,这些信号在sys/signal.h中定义,系统支持64种信号。除了系统内核和root之外,只有具备相同uid、gid的进程才可以使用信号进行通信。 gaolu@gaolu-desktop:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT&n
在Linux系统中,进程运行在自己的虚拟内存空间中,如何协调不同虚拟地址空间中的进程访问一个非共享资源,文件加锁是基本进程通信方法之一。 可以使用fcntl()、lockf()、flock()实现文件锁,进而实现进程之间的通信。 1.fcntl() 【函数介绍】 调用形式(执行失败返回-1): int fcntl(int fd,int cmd); int
【syslogd守护进程】 由于守护进程没有控制终端进行信息的输出,而有些情况还需要根据进程提供的信息进行系统管理和维护工作。因此Linux提供了syslogd守护进程,专门用于接受其他守护进程提供的信息记录在指定位置来解决日志记录的问题。 1.syslogd守护进程 负责记录、发送系统或者工具产生的信息,根据配置文件信息对消息的去向做出处理(记录到日志、输出到控制台、转发给
【守护进程介绍】 Linux系统启动时往往要启动很多的系统服务程序,比如apache,ftp,telnet等。这些系统服务程序往往运行在后台,没有控制终端,在系统引导装入时启动,在系统关闭时终止,周期性的执行某项任务或者等待处理某项任务。这样的进程叫守护进程或者精灵进程。 编写守护进程一般是在普通进程基础上,根据守护进程的特点进行改造。编程实现守护进程要遵循的几个要点: &n
【waitpid()介绍】 waitpid主要用于根据进程ID号等待指定的子进程。函数形式如下: ****************************************************** pid_t waitpid(pid_t pid, int* status,int options); *****************************************
(1)wait() wait函数用于父进程和子进程的同步,让父进程等待子进程结束。wait函数不需要带任何参数,适合于等待所有的子进程。相关信息如下: pid_t wait(int* status); 如果函数执行成功,返回等待到结束的子进程的PID和结束状态status,否则返回-1. 状态status有2种情况:一种是正常的退出,另一种是接受到了信号(eg.kill)而退出。 &nb
(1)fork和vfork 之前用过fork来创建子进程,知道可以根据返回值来区分父子进程,对于父进程来说,fork的返回值是子进程ID,对于子进程来说返回PID为0.关于这一点,vfork函数与fork函数是相同的。而fork与vfork的区别在于在哪呢? ********************************************************************
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号