open是非标准的低级文件I/O函数,返回文件的低级句柄、原型。

intopen(char*path,int access,

open是可变参数的函数实现,后面的可变参数通常表示unsigned mode,mode参数是否存在是访问的值,path是文件的路径。

access和mode的可能值通常在FCNTL.h中定义,access的可能值如下:

#define O_RDONLY 1

#define O_WRONLY 2

#define O_RDWR 4

访问也是从以下flag及其组合中获得的性质:

# defineo _ creat0x 0100/* createandopenfile * /

# defineo _ trunc0x 0200/* openwithtruncation * /

# defineo _ excl0x 0400/* exclusive open * /

# defineo _ append0x 0800/* toen DOF file * /

# defineo _ changed0x 1000/* usermayreadthesebits,but */

# defineo _ device0x 2000/* only RTL/iofunctionsmaytouch.* /

# defineo _ text0x 4000/* Cr-lf转换* /

# defineo _ binary0x 8000/* no translation * /

如果使用O_CREAT,则必须指定mode参数。 mode的可能值可以在sys/stat.h中定义,也可以进行以下组合:

# defines _ iread0x 0100/* ownermayread * /

# defines _ I write0x 0080/* ownermaywrite * /

open(s[I],0x 0100,0x 0080; 的意思是,以可写的方式打开s[i]中指出的文件,如果文件不存在则创建。 返回此文件的低级句柄。

函数原型:

intopen (常数通道*路径,int access,int模式);

角色:

用各种方法打开文件

返回值:

返回打开的文件句柄。 -1无法打开

输入参数的说明。

path打开的文件的路径和名称

访问模式、宏的定义和含义如下。 O_RDONLY 1只读打开仅打开O_WRONLY 2写入打开O_RDWR 4读写打开

也可以选择以下三个基本模式相和相:

创建并打开O_CREAT0x0100文件

O_TRUNC0x0200打开现有文件,并将文件长度设置为0。 其他属性保证这一点

O_EXCL0x0400未使用

O_APPEND0x0800附加打开文件

打开O_TEXT0x4000文本文件以翻译CR-LF控制字符

O_BINARY0x8000打开二进制字符,不进行CR-LF翻译

mode此参数仅用于access=O_CREAT方法,其值如下:

S_IFMT0xF000文件类型掩码

S_IFDIR0x4000目录

S_IFIFO0x1000 FIFO专用

S_IFCHR0x2000字符专用

S_IFBLK0x3000块专用

S_IFREG0x8000仅限0x0000

S_IREAD0x0100可读

S_IWRITE0x0080可写

S_IEXEC0x0040可执行

intopen (常数通道*路径,int access,int模式);

————- -请参阅

这个原型是错误的。 因为第三个参数mode仅在access为O_CREAT的情况下有效,所以open的函数实现是可变参数函数,如果如上声明,则无论access的值如何,都必须给出mode 以下列举了tc2.0、tc3.1、vc6.0、C Builder和gcc中open函数的原型。

gcc:

_ crtimp int _ _ cdecl _ open (常数char *,int,

VC6.0 :

_ crtimp int _ _ cdecl _ open (常数char *,int,

Borland C Builder :

int _ RTL entry _ expfuncopen (const char _ far * _ path,int __access,/*unsigned mode*/);

tc3.1 :

int _ cdecl _ farfuncopen (const char _ far * _ path,int __access,/*unsigned mode*/);

TC 2.0:int _ cdecl open (常数char * path,int access,/*unsigned mode*/);