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*/);