
APUE
otuhacker
这个作者很懒,什么都没留下…
展开
-
关于APUE 程序清单8-5的理解
调用fork两次以避免僵死进程,第一遍看的时候不懂,感觉书里讲的比较少,到第二遍的时候才自认理解了一些。我的理解是这样的:初始进程fork个子进程,子进程再fork个孙子进程来。然后让子进程结束,孙子进程的父进程就改成init。初始进程等待其子进程结束并用waitpid处理之,然后继续运行;而孙子进程结束后的处理由init来完成。这样初始进程和孙子进程就可以各做各的转载 2013-01-07 17:37:27 · 465 阅读 · 0 评论 -
13-01-21-->6
NULL原创 2013-01-20 22:33:13 · 375 阅读 · 0 评论 -
13-01-19-->4
对文中出现的restrict关键字的认识: 关键字restrict仅对指针有用,修饰指针,表明要修改这个指针所指向的数据区的内容,仅能通过该指针来实现,此关键字的作用是使编译器优化代码,生成更高效的汇编代码,“由restrict修饰的指针是最初唯一对指针所指向的对象进行存取的办法,仅当第二个指针基于第一个时,才能对对象进行存取.”(其实restrict同const或voliate一样是一个修原创 2013-01-18 17:04:49 · 440 阅读 · 0 评论 -
13-01-18-->3
UNIX系统大多数文件I/O需要5个函数:open、read、write、lseek及close。(不带缓冲的I/O,都调用内核中的一个系统调用。)使用open或creat返回的文件描述符标识该文件,将其作为参数传送给read或write。文件描述符的变化范围是0---OPEN_MAX.创建一个新文件int create(const char* pathname, mode原创 2013-01-17 23:30:14 · 406 阅读 · 0 评论 -
13-01-17-->2
POSIX是可移植的操作系统接口(Portable Operating System Interface).该标准的目的是提高应该程序在各种UNIX系统之间的可移植性。2-3:为路径名动态分配空间#include "apue.h"#include #include #ifdef PATH_MAXstatic int pathmax = PATH_MAX;#else原创 2013-01-17 12:47:49 · 350 阅读 · 0 评论 -
13-01-16-->1
此处是自己在读apue时对自认为是重点的一些信息摘录而已。系统调用即为kernel的接口。公共函数库在系统调用之上。应用软件既可以使用公共函数库,也可以使用系统调用。文件系统中目录是一个有着许多目录项的文件。包含一个文件名与说明该文件属性的信息。此处文件属性指文件类型(普通文件or目录)、文件大小、文件所有者、文件权限、文件最后修改时间等。不用缓冲的原创 2013-01-17 12:34:16 · 391 阅读 · 0 评论 -
13-01-28-->13
守护进程是生存期较长的一种进程。常在系统自举时启动,仅在系统关闭时才终止。没有控制端,在后台运行。PGID:进程组ID,SID:会话ID,TTY:终端名称,TPGID:终端进程组ID(与该控制终端相关的前台进程组)所有用户层守护进程都是进程组的组长进程以及会话的首进程,而且是这些进程组和会话中的唯一进程。大多数守护进程的父进程是init进程。编写规则1.调用umask将原创 2013-01-28 11:41:48 · 323 阅读 · 0 评论 -
13-01-26-->11
线程包含表示进程内执行环境必需的信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。线程标识线程ID只在它所属的进程环境中有效。pthread_t表示之,Linux使用无符号长整型来表示这个数据类型。原创 2013-01-26 09:48:44 · 384 阅读 · 0 评论 -
13-01-27-->12
线程属性pthread_attr_t如果在创建线程时就知道不需要了解线程的终止状态,可以修改pthread_attr_t结构中的detachstate线程属性,让线程以分离状态启动。对于线程来说,同样大小的虚拟地址空间必须被所有的线程栈共享。如果应用程序使用太多的线程,致使线程栈的累计大小超过了可用的虚拟地址空间,这时需要减少线程默认的栈大小。stackaddr线程属性被定原创 2013-01-27 23:52:38 · 344 阅读 · 0 评论 -
13-01-25-->10
信号SIG开头,为一个正整数,没有信号编号为0的信号。软件也有可能产生一些信号。e.g.在管道中,读进程已经进行结束而写进程还在向管道中写数据,就会产生SIGPIPE信号。内核对信号的三种处理:1.忽略信号,但SIGKILL,SIGSTOP这两个信号不可被忽略 2.捕捉(catch)信号3.使用缺省的处理函数,针对大多数信号的系统默认动作是终止进程。signal函数vo原创 2013-01-24 00:26:16 · 373 阅读 · 0 评论 -
13-01-24-->9
终端登录登录都经由内核中的终端设备驱动程序。/etc/ttys(Linux 为/etc/inittab)文件,其中,每个终端设备都有一行(每行包括设备名和传递给getty程序的参数)。UNIX系统传统的用户身份验证过程:当系统自举时,内核创建init(ID为1)进程。init使系统进入多用户状态。init进程读/etc/ttys,对每一个允许登录的终端设备,init调用一次fork,它原创 2013-01-23 09:44:32 · 546 阅读 · 0 评论 -
13-01-23-->8
每个进程都有一个非负整型表示的唯一进程ID。系统有一些专用的进程:ID为0的进程常为调度进程(swapper),改进程是内核的一部分,不执行任何磁盘上的程序,因此也被称为系统进程。ID为1的进程常为init进程,在自举过程(bootstrap procedure)结束由内核调用。负责在自举内核后启动一个UNIX系统。init通常读与系统有关的初始化文件(/etc/rc*文件或/etc/原创 2013-01-22 17:12:19 · 402 阅读 · 0 评论 -
13-01-22-->7
main()内核执行c程序时,在调用main前先调用一个特殊的启动例程,可执行程序将此启动例程指定为程序的起始位置。启动例程从内核取得命令行参数,环境变量,为调用main函数做好安排。三个函数用于正常终止一个程序:_exit和_Exit立即进入内核,exit则先执行一些清理处理(包括调用执行各终止处理程序,关闭所有标准I/O流等。),然后进入内核。int atexit(原创 2013-01-20 22:35:09 · 319 阅读 · 0 评论 -
13-01-20-->5
缓冲当且仅当标准输入和标准输出并不涉及交互式设备时,它们才是全缓冲的。当流涉及一个终端时(标准输入or输出),通常使用行缓冲。标准出错绝不会是全缓冲的,通常为不带缓冲的。原创 2013-01-19 23:48:23 · 342 阅读 · 0 评论