程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言OPEN函數語法及其應用

C語言OPEN函數語法及其應用

編輯:關於C語言

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved