上一页 1 ··· 5 6 7 8 9
摘要: 1、signal函数 Unix系统的信号机制最简单的接口是signal函数,函数原型如下: #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); signum表示信号名称,handler取值常量SIG_IGN(忽略此信号)、常量SIG_DFL(执行默认动作)或者接到此信号后要调用的函数的地址(调用信号处理程序)。写个程序练习一下signal函数的使用,程序的功能是捕获子进程退出。程序如下:View Code 1 #i. 阅读全文
posted @ 2012-12-17 17:01 Rabbit_Dale 阅读(1060) 评论(0) 推荐(2) 编辑
摘要: 信号时软中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法。每个信号都一个名字,以SIG开头,在<signal.h>头文件中定义信号类型,都是正整数(信号编号)。 产生信号的条件:(1)当用户按某些终端键时,引发终端产生的信号。(2)硬件异常产生信号。(3)进程调用kill函数将信号发送给另外一个进程或进程组。(4)用户用kill命令将信号发送给其他进程。(5)检测到某种软件条件已经发送,并将其通知有关进程时候产生信号。 内核在信号出现时候处理方式有:(1)忽略此信号,(2)铺捉信号,(3)执行系统默认动作。Unix系统信号如下:其中SIGKILL和SIG 阅读全文
posted @ 2012-12-17 16:33 Rabbit_Dale 阅读(940) 评论(0) 推荐(1) 编辑
摘要: 本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用。通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态。先将本章基本的知识点总结如下,日后再看时候好好总结一下。1、终端登录 介绍了有终端登录Unix系统的过程。通过init进程读文件/etc/ttys,fork一个子进程调用exec执行getty程序进行登录,当用户输入完用户名后,getty的工作完成了,然后调用login程序,类似execle("/bin/login","login","-p",username,(char *)0 阅读全文
posted @ 2012-12-17 12:18 Rabbit_Dale 阅读(922) 评论(0) 推荐(0) 编辑
摘要: 1.字节序函数#include <netinet.h>uint16_t htons(uint16_t host16bitvalue);uint32_t htonl(uint32_t host32bitvalue);返回:网络字节序值uint16_t ntohs(uint16_t net16bitvalue);uint32_t ntohl(uint32_t net32bitvalue);返回:主机字节序值一个测试本机字节序的程序,可参见见unpv12e:intro/byteorder.c。2.字节操作函数#include <strings.h>void bzero(voi 阅读全文
posted @ 2012-12-16 18:04 Rabbit_Dale 阅读(2144) 评论(1) 推荐(5) 编辑
摘要: 在Unix/Linux中用fork函数创建一个新的进程。进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程。该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程。两次返回的区别是子进程的返回值为0,父进程的返回值是新子进程的ID。子进程与父进程继续并发运行。如果父进程继续创建更多的子进程,子进程之间是兄弟关系,同样子进程也可以创建自己的子进程,这样可以建立起定义关系的进程之间的一种层次关系。 程序包含位于内存的多个组成部分,执行程序的过程将根据需要来访问这些内容,包括文本段(text segment)、数据段(data segments)、栈(sta... 阅读全文
posted @ 2012-12-16 15:01 Rabbit_Dale 阅读(9743) 评论(0) 推荐(1) 编辑
摘要: 本章介绍Unix的进程控制,包括进程创建,执行程序和进程终止,进程的属性,exec函数系列,system函数,进程会计机制。1、进程标识符 每一个进程都有一个非负整数标识的唯一进程ID。ID为0表示调度进程,即交换进程,是内核的一部分,也称为系统进程,不执行任何磁盘操作。ID为1的进程为init进程,init进程不会终止,他是一个普通的用户进程,需要超级用户特权运行。获取标识符函数如下:#include <sys/types.h>#include <unistd.h> pid_t getpid(void); //调用进程的进程IDpid_t getppid(void); 阅读全文
posted @ 2012-12-16 12:28 Rabbit_Dale 阅读(1106) 评论(0) 推荐(0) 编辑
摘要: 本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制。 main函数的原型为int main(int argc,char *argv[]);其中argc是命令行参数的数目,argv是指向参数的各个指针构成的数组。当内核执行C程序时,使用一个exec函数,在调用main函数前线调用一个特殊的启动例程,从内核获取命令行参数和环境变量。 进程终止分为正常终止和异常终止。正常终止包括:(1)从main返回,(2)调用exit();(3)调用_exit或者_... 阅读全文
posted @ 2012-12-15 17:35 Rabbit_Dale 阅读(875) 评论(0) 推荐(0) 编辑
摘要: 本章主要介绍了Unix系统的正常运行要使用的与系统有关的数据文件和信息。如:口令文件,阴影文件、组文件、附加组、系统标识、时间和日期历程。 口令文件,即Unix系统用户数据库,存储在/etc/passwd中,是一个ASCII文件,包含的字段信息在<pwd.h>定义的passwd数据结构中。 struct passwd { char *pw_name; /* username */ char *pw_passwd; /* user password */ uid_t pw_uid; /* user ID */ gid_t pw_gid; /* group ID */ ... 阅读全文
posted @ 2012-12-15 11:01 Rabbit_Dale 阅读(831) 评论(0) 推荐(0) 编辑
摘要: 标准I/O库是ISO C的标准,在很多操作系统上面都实现。Unix文件I/O函数都是针对文件描述符的,当打开一个文件的时候,返回该文件描述符用于后续的I/O操作。而对于标准I/O库,操作则是围绕流进行,当用标准I/O库打开或者创建一个文件时,使得一个流与文件相关联。标准I/O库使用了缓冲技术,使用缓冲的目的是尽可能减少使用read和write调用次数,但是效率不高。每次进行读写时候需要复制两次数据。第一次是在内核和标准I/O缓冲之间(调用read和write),第二次是在标准I/O缓冲区和用户程序中的行缓冲区之间。提供了三种类型的缓冲:全缓冲、行缓冲和不带缓冲。标准I/O预定义三个文件指针.. 阅读全文
posted @ 2012-12-14 10:54 Rabbit_Dale 阅读(778) 评论(0) 推荐(0) 编辑
摘要: Unix系统中大多数文件I/O只需用到五个函数:open、read、write、lseek、close。本章说介绍的I/O是不带缓冲的,即:每个read和write都调用内核中的一个系统调用。不是ISO C的组成部分。对于内核而言,所有打开的文件都通过文件描述符引用。在<unistd.h>中定义三个标准的文件描述符:STDIN_FILENO 标准输入STDOUT_FILENO 标准输出STDERR_FILENO 标准出错输出具体函数描述:在<fcntl.h>头文件下int open(const char *path, int oflag, ... ); //打开或者创建 阅读全文
posted @ 2012-12-13 21:51 Rabbit_Dale 阅读(1102) 评论(0) 推荐(0) 编辑
摘要: 本章主要介绍的是文件结构及目录。重点是通过stat函数获取文件的结构信息,然后是文件目录及其遍历。学完本章后,编写了一个输出给的目录下的文件信息的程序。首先是包含在<sys/stat.h>文件下的stat、fstat、lstat三个函数,三个函数的原型如下:int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const char *path, struct stat *buf); 三个函数的返回值:成功返回0,出错返回-1。三个函数的区别如下:stat( 阅读全文
posted @ 2012-12-13 20:44 Rabbit_Dale 阅读(1097) 评论(0) 推荐(0) 编辑
摘要: 管道(pipe) 管道在Unix及Linux进程间通信是最基础的,很容易理解。管道就像一个自来水管,一端注入水,一端放出水,水只能在一个方向上流动,而不能双向流动。管道是典型的单向通信,即计算机网络中所说的“半双工”。管道又名匿名管道,所以只能用在具有公共祖先的进程之间使用,通常使用在父子进程之间通信。通常是父进程创建一个管道,然后fork一个子进程,此后父子进程共享这个管道进行通信。 管道由pipe函数创建,函数原型如下: #include<unistd.h> int pipe(int fd[2]); 成功返回0,否则返回-1;参数fd返回两个文件描述符,fd[0]为读,fd[1 阅读全文
posted @ 2012-12-09 16:03 Rabbit_Dale 阅读(3656) 评论(3) 推荐(0) 编辑
摘要: POSIX标准定义的头文件<dirent.h> 目录项<fcntl.h> 文件控制<fnmatch.h> 文件名匹配类型<glob.h> 路径名模式匹配类型<grp.h> 组文件<netdb.h> 网络数据库操作<pwd.h> 口令文件<regex.h> 正则表达式<tar.h> TAR归档值<termios.h> 终端I/O<unistd.h> 符号常量<utime.h> 文件时间<wordexp.h> 字符扩展类型----------- 阅读全文
posted @ 2012-12-09 14:32 Rabbit_Dale 阅读(1952) 评论(0) 推荐(1) 编辑
摘要: 之前在百度空间写博客,用了近5年的百度空间,今年突然升级了一下,面目全非,感觉非常不习惯,没心情去更新了。博客圈老早就注册有帐号,一直没有写。博客园上的博文非常有水平,我经常遇到问题时候,就搜到了博客园。看博文之后深受启发,博客园是IT人的博客,我要开始博客园之旅,向大家学习,共同学习。 阅读全文
posted @ 2011-07-28 14:49 Rabbit_Dale 阅读(997) 评论(2) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9