点击这里给我发消息 点击这里给我发消息

实例讲解C语言OPEN函数语法及其应用

添加时间:2013-12-7
    相关阅读: DW C语言 C++ VC

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

    int open(char* path, int access, ……);

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

    access和mode的可取值通常在FCNTL.h里面定义,access的可取值如下:

    #define O_RDONLY          1

    #define O_WRONLY          2

    #define O_RDWR          4

    access还可以是以下flag及它们之间的组合而得到的性质:

    #define O_CREAT         0x0100     /* create and open file */

    #define O_TRUNC         0x0200     /* open with truncation */

    #define O_EXCL         0x0400     /* exclusive open */

    #define O_APPEND              0x0800     /* to end of file */

    #define O_CHANGED              0x1000     /* user may read these bits, but     */

    #define O_DEVICE              0x2000     /* only RTL\io functions may touch.     */

    #define O_TEXT         0x4000     /* CR-LF translation     */

    #define O_BINARY              0x8000     /* no translation     */

    使用O_CREAT的时候,必须指定mode参数,mode的可取值在sys\stat.h里面定义,也可以是它们的组合,如下:

    #define S_IREAD     0x0100     /* owner may read */

    #define S_IWRITE   0x0080     /* owner may write */

    open(s[i], 0x0100,0x0080);的意思是以O_CREAT和可写的方式打开s[i]中指出的文件,如果文件不存在,就创建它。返回这个文件的低级句柄。

    函数原型:

    int open(const char *path, int access,int mode);

    作用:

    以各种方式打开文件

    返回值:

    返回打开的文件句柄,-1 打开失败

    输入参数说明:

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

    access 访问模式,宏定义和含义如下:                       O_RDONLY          1     只读打开                          O_WRONLY          2     只写打开                          O_RDWR            4     读写打开

    还可选择以下模式与以上3种基本模式相与:

    O_CREAT      0x0100    创建一个文件并打开

    O_TRUNC      0x0200    打开一个存在的文件并将文件长度设置为0,其他属性保此

    O_EXCL       0x0400    未使用

    O_APPEND     0x0800    追加打开文件

    O_TEXT       0x4000    打开文本文件翻译CR-LF控制字符

    O_BINARY     0x8000    打开二进制字符,不作CR-LF翻译

    mode 该参数仅在access=O_CREAT方式下使用,其取值如下:

    S_IFMT       0xF000    文件类型掩码

    S_IFDIR      0x4000    目录

    S_IFIFO      0x1000    FIFO 专用

    S_IFCHR      0x2000    字符专用

    S_IFBLK      0x3000    块专用

    S_IFREG      0x8000    只为0x0000

    S_IREAD      0x0100    可读

    S_IWRITE     0x0080    可写

    S_IEXEC      0x0040    可执行

    int open(const char *path, int access,int mode);

------------------------------------------------

    这个原型是错误的,由于第三个参数mode只有当access为O_CREAT的时候才有效,因此open的函数实现是一个可变参数函数,如上那样声明的话,就变成了不管access的值是多少,mode都必须给出,这是错误的。以下列举tc2.0、tc3.1、vc6.0、C++Builder和gcc中的open函数的原型:

    gcc:

    _CRTIMP int __cdecl _open (const char*, int, ……);

    VC6.0:

    _CRTIMP int __cdecl _open(const char *, int, ……);

    Borland C++Builder:

    int   _RTLENTRY _EXPFUNC open(const char _FAR *__path, int __access,…… /*unsigned mode*/);

    tc3.1:

    int _Cdecl _FARFUNC open(const char _FAR *__path, int __access,…… /*unsigned mode*/);

    tc2.0:

    int   _Cdecl open      (const char *path, int access,…… /*unsigned mode*/);

相关实例讲解C语言OPEN函数语法及其应用

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册