文件描述符
通常,一个进程启动时,都会打开 3 个文件:标准输入、标准输出和标准出错处理。这3 个文件分别对应文件描述符为 0、1和2也就是宏替换 STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO 。这三个符号常量的定义位于头文件 unistd.h。
文件描述符的有效范围是 0 到 OPEN_MAX。一般来说,每个进程最多可以打开 64 个文件(0 — 63)。对于 FreeBSD 5.2.1、Mac OS X 10.3 和 Solaris 9 来说,每个进程最多可以打开文件的多少取决于系统内存的大小,int 的大小,以及系统管理员设定的限制。Linux 2.4.22 强制规定最多不能超过 1,048,576 。
大多数 UNIX 文件 I/O 只需用到6个函数: open、create、read、write、lseek 以及 close 。
open 函数
create 函数
S_IRUSR user-read 用户-读
S_IWUSR user-write 用户-写
S_IXUSR user-execute 用户-执行
S_IRGRP group-read 组-读
S_IWGRP group-write 组-写
S_IXGRP group-execute 组-执行
S_IROTH other-read 其它-读
S_IWOTH other-write 其它-写
S_IXOTH other-execute 其它-执行
creat的一个不足之处是它以只写方式打开所创建的文件。现在基本都用 open 函数替代它了。
close 函数
close 函数用于关闭打开的文件,函数定义在文件 <unistd.h> 中,函数原形为:
read 函数
用 read 函数从打开文件中读数据。定义在文件 <unistd.h> 中,函数原形为:
write 函数
用write函数向打开文件写数据。定义在 <unistd.h> 中,函数原形为:
程序示例:
#include <stdio.h>
#define BUFFSIZE 8192
int main( void ){
int n;
char buff[BUFFSIZE];
while( (n= read( STDIN_FILENO, buff, BUFFSIZE ) )> 0 )
if( write( STDOUT_FILENO, bufff, n )!= n ){
printf("Write error\n"); return 0; }
if( n< 0 ) { printf("Read error\n" ); return 0; }
return 0;
}
lseek 函数
返回值:新的偏移量(成功),-1(失败)