<unistd.h>的两个常量STDIN_FILENO, STDOUT_FILENO是POSIX标准的一部分, 他们指定了标准输入和标准输出的文件描述符,他们的典型值分别是0和1。该头文件包含了很多UNIX系统服务的函数原型。
stdin和stdout常量定义在<stdio.h>中,表示标准输入和标准输出文件。
UNIX环境高级编程中文第二版PDF高清版 下载地址
1.6 程序和进程
1.程序
是存放在磁盘上,处于某个目录中的一个可执行文件。使用6个exec函数中的一个由内核将程序读入存储器,并使其执行。
2.进程
程序执行的实例process。某些操作系统用任务task表示被执行的程序。getpid()返回进程ID。
3.进程控制
fork(), exec(), waitpid()
4.线程和线程ID
通常一个进程只有一个控制线程,但是如果不同部分各使用一个控制线程,那么整个问题解决起来就容易很多。在一个进程内的所有线程共享同一地址空间,文件描述符,栈以及与进程相关的属性。因为他们能访问同意存储区,所以各线程在访问共享数据时需要采取同步措施以避免不一致性。
在一个进程中,我们用线程ID引用相应的线程。
在进程模型建立后很久,线程模型才被引入到unix系统中,这两个模型之间存在复杂的相互作用。
1.7 出错处理
unix函数出错时,常常返回一个负值,而整形变量errno通常被设置为含有附加信息的一个值。
文件<errno.h>中定义了符号errno以及可以赋予它的各种常量,这些常量都以字符E开头。
在支持线程的环境中,多个线程共享进程地址空间,每个线程都有属于它自己的局部errno以避免一个线程干扰另一个线程。
例如:linux支持多线程存取errno,将其定义为:
extern int *__errno_location(void);
$define errno (*__errno_location())
对于errno应当知道两条规则: 1,如果没有出错,则其值不会被一个例程清楚。2,任一函数不会将errno值设置为0.
c标准定义了两个函数,它们帮助打印出错信息
#include <string.h>
char *strerror(int errnum);
或
#include <stdio.h>
void perror(const char *msg)
1.8 用户标识