unix环境高级编程
文章平均质量分 78
ptn3900
人生三大乐趣:写代码,车,股票
展开
-
16面向连接的客户端服务器端
<br />1./etc/services里面存储服务信息<br />ruptimed 4000/tcp<br />这条就是一个服务信息。因为文件中没有这条信息,所以在运行时,出现, servname not supported for ai_socktype。<br />所以只需要把ruptimed 4000/tcp添加到/etc/services文件中。<br />ruptimed是服务名,4000是端口号,tcp是连接类型(4000没有被其他服务占用)<br />打开这个文件,会看见很多相似条目,比如原创 2011-05-31 09:42:00 · 955 阅读 · 0 评论 -
高级I/O
<br />14.2非阻塞I/O<br />非阻塞I/O使我们可以调用open,read和write这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则调用立即出错返回,表示该操作如继续执行将阻塞。<br />指定为非阻塞I/O<br />1)open描述符,指定O_NOBLOCK<br />2)已经打开的描述符,调用fcntl,打开O_NOBLOCK状态标志。<br />----------------------------------------------------------<b原创 2011-04-29 11:28:00 · 432 阅读 · 0 评论 -
12线程控制
12.3线程属性#include int pthread_attr_init(pthread-attr_t *attr)int pthread_attr_destroy(pthread_attr_t * attr)可以使用pthread_attr_t结构修改线程默认属性,并把这些属性与创建的线程联系起来。可以使用int pthread_attr_init(pthread-attr_t *attr)函数初始化,pthread_attr_t就包含的内容就是操作系统实现支持的线程所有属性的默认值。int pthr原创 2011-04-27 22:09:00 · 621 阅读 · 0 评论 -
13守护进程
<br />13.3编程规则<br />1)umask将文件模式创建屏蔽字设置为0.<br />2)调用fork,然后使父进程退出。<br />3)调用setsid以创建一个新会话。<br />4)将当前工作目录更改为根目录。<br />5)关闭不再需要的文件描述符。<br />6)某些守护进程打开/dev/null使其具有文件描述符0,1,2<br />-----------------------------------------------------------------<br />13.4出错原创 2011-04-28 17:23:00 · 318 阅读 · 0 评论 -
11线程
<br />线程包含了表示进程内执行环境必需的信息,其中包括进程中标识线程的线程ID,一组寄存器值,栈,调度优先级和策略,信号屏蔽字,errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本,程序的全局内存和堆内存,栈以及文件描述符测试宏_POSIX_THREADS<br />------------------------------------------------------<br />线程标识<br />进程ID在整个系统中是唯一的,但线程ID不同,线程ID原创 2011-04-26 18:51:00 · 385 阅读 · 0 评论 -
inode,vnode,file
http://www.cnblogs.com/dev2dev/archive/2005/11/14/276378.html Unix环境高级程序设计入门 ----文件系统的相关编程(上)转载 2011-06-16 14:58:00 · 1187 阅读 · 0 评论 -
exec函数族
exec函数族也许有不少读者从本系列文章一推出就开始读,一直到这里还有一个很大的疑惑:既然所有新进程都是由fork产生的,而且由fork产生的子进程和父进程几乎完全一样,那岂不是意味着系统中所有的进程都应该一模一样了吗?而且,就我们的常识来说,当我们执行一个程序的时候,新产生的进程的内容应就是程序的内容才对。是我们理解错了吗?显然不是,要解决这些疑惑,就必须提到我们下面要介绍的exec系统调用转载 2011-06-16 11:20:00 · 335 阅读 · 0 评论 -
wait,waitpid,waitid,wait3,wait4
8.6 wait and waitpid function1.子进程停止回向父进程发送SIGCHLD信号2.父进程调用wait会有如下情况:· Block, if all of its children are still running· Return immediately with the termination status of a c原创 2011-06-16 10:55:00 · 1407 阅读 · 0 评论 -
vfork,fork,exec区别
vfork用于创建一个新进程,而该新进程的目的是exec一个新进程,vfork和fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec,于是也就不会存放该地址空间。。不过在子进程中调用exec或exit之前,他在父进程的空间中运行。vfork和fork之间的另一个区别是: vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调原创 2011-06-16 10:52:00 · 749 阅读 · 0 评论 -
9进程关系
<br />BSD终端登录<br />1)系统管理员创建/etc/ttys文件。其中,每个终端设备都有一行,每一行说明设备名和传递给getty程序的参数。<br />2)系统自举时,内核创建进程ID为1的进程,也就是init进程。init进程使系统进入多用户状态。init进程读取文件/etc/ttys。对每一个允许登录的终端设备,init调用一次fork,它所生的子进程则执行(exec)getty程序。init以空环境执行getty程序<br />3)getty为终端设备调用open函数,以读写方式将终端打原创 2011-04-22 21:58:00 · 415 阅读 · 0 评论 -
10信号
--------------------------------------------------------------信号概念每个信号都有一个名字,这些名字都以三个字符SIG开头。信号处理动作:1)忽略此信号2)捕捉信号3)执行系统默认动作“终止+core”表示在该进程当前工作目录的core文件中复制该进程的存储映像。不产生core文件条件:1)进程是设置用户ID的,而且当前用户并非程序文件的所有者2)进程是设置组ID的,而且当前用户并非该程序文件的组所有者。3)用户没有写当前工作目录的权限4)文件已原创 2011-04-25 17:37:00 · 383 阅读 · 0 评论 -
实际用户ID,有效用户ID,设置用户ID
前段时间一直没搞明白这几个ID之间的关系,今天看到一篇博文,这才拨云见日,才有所了解了.real user ID:实际用户ID,指的是进程执行者是谁effective user ID:有效用户ID,指进程执行时对文件的访问权限saved set-user-ID:保存设置用户ID,作为effective user ID的副本,在执行exec调用时后能重新恢复原来的effectiv u转载 2011-06-16 13:41:00 · 1471 阅读 · 2 评论 -
8进程控制
Unix系统实现延迟重用算法,使得赋予新建进程的ID不同于最近终止进程所使用的ID。防止了将新进程误认为是使用同一ID的某个已终止的先前进程。ID为0的进程通常是调度进程,因此也被称为系统进程。ID为1的通常是init进程,在自举过程结束时由内核调用。早期版本中是/etc/init,新版本中是/sbin/init,此进程负责在自举内核后启动一个unix系统。init通常读与系统有关的初始化文件(/etc/rc*文件或/etc/inittab文件,以及/etc/init.d中的文件,并将系统引导到一个状态。i原创 2011-04-21 19:30:00 · 434 阅读 · 0 评论 -
2.2头文件标准定义
验证程序断言 支持复数算数运算 字符类型 出错码 浮点环境 浮点常量 整型格式转换 替代关系操作符宏 实现常量 局部类型 数学常量 非局部goto 信号 可变参数表 布尔类型和值 标准定义 整型 标准I/O库 实用程序函数 字符操作函数 通用类型函数宏 时间和日期原创 2011-04-18 14:55:00 · 395 阅读 · 0 评论 -
7进程环境
内核执行C程序时,使用一个exec函数,在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址:--这是由连接编辑器设置的,而连接编辑器则由C编译器调用。启动例程从内核取得命令行参数和环境变量值。8忠方式使进程终止五种正常终止1,从main返回2,调用exit3,调用_exit或_Exit4,最后一个线程从其启动例程返回。5,最后一个线程调用pthread_exit。异常终止有3种方式6,调用abort7,接到一个信号并终止8,最后一个线程对取消请求做出响应。-------原创 2011-04-21 11:38:00 · 481 阅读 · 0 评论 -
Linux设备驱动中的异步通知与异步I/O
<br />异步通知的概念与作用<br />异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上"中断"的概念,比较准确的称谓是"信号驱动的异步I/O"。<br /> Linux信号 Linux系统中,异步通知使用信号来实现。<br />信号也就是一种软件中断。<br />信号的产生:kill raise alarm 用户按下某些终端键; 硬件异常; 终止进程信号; 软件异常。 <转载 2011-06-01 15:39:00 · 583 阅读 · 0 评论 -
Linux 异步IO机制
<br />Linux的I/O机制经历了一下几个阶段的演进:<br />1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。<br />2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。<br />3. 异步事件阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数调用来达到此目的。<br />4. 异步时间非阻塞I/O转载 2011-06-01 15:50:00 · 304 阅读 · 0 评论 -
15进程间通信
<br />15.2管道<br />1)历史上是半双工的。现在,系统提供全双工管道。<br />2)只能在具有公共祖先的进程之间使用。<br />#include<unistd.h><br />int pipe(int filedes[2])<br />filedes[0]为读打开<br />filedes[1]为写打开。<br />filedes[1]输出是filedes[0]输入。<br />fstat函数对管道的每一端都返回一个FIFO类型的文件描述符,可以用S_ISFIFO宏来测试管道<br />当原创 2011-05-06 16:13:00 · 299 阅读 · 0 评论