3.3 open函数-打开文件

open函数用来打开一个文件,建立一个文件描述符到文件路径的映射,为后续的各种文件操作建立一个文件标识。

open函数原型如下:

#include <fcntl.h>
int open(const char *pathname, int oflag,...);

返回值:如果成功则返回文件描述符,如果出错则返回-1。

参数:

1、pathname 是要打开或创建的文件的路径或者名字。可以是绝对路径,也可以是相对路径。

2、oflag 是操作选项。是一个整数,每个位代表一个操作选项。通过一些常量的或运算构成综合性的操作参数。

3、...  说明该参数是可选参数,该参数mode_t类型数据。称为文件创建模式字,它决定要的文件的一些权限。参考umask函数,这里暂且不管这个参数。

三个常量决定文件的读写模式,可以选择其中一个,不能同时选。这三个是O_RDONLY、O_WRONLY、O_RDWR。定义在头文件<fcntl.h>或者<bits/fcntl.h>中。

#define O_RDONLY             00     /*只读方式打开*/
#define O_WRONLY             01     /*只写方式打开*/
#define O_RDWR               02     /*读写方式打开*/

也就是说, oflag参数的低2位( bit0bit1)表示文件读写模式, bit0为1表示文件只能用于写操作, bit1为1表示可读也可写, bit0bit1都为0表示只读。

实例 x.3.3.1

#include <fcntl.h>
#include <stdio.h>

int main(void)
{
    char     pathname[] = "/tmp/myfile";
    int      fileid;

    fileid = open(pathname, O_RDWR | O_CREAT);
/* O_RDWR表示读写模式打开*/
/*O_CREAT表示如果文件不存在则创建它*/

    if (fileid < 0 ) { /*fileid 为负数则说明open失败*/
        printf("open error for %s\n", pathname);
        return 1;
    } else {/*fileid为非负则说明open成功*/
        printf("fileid is %d\n", fileid);
        close(fileid);
    }   

    return 0;

}

编译与运行:

[root@localhost unixc]# cc x.3.3.1.c
[root@localhost unixc]# ./a.out
fileid is 3
[root@localhost unixc]# 


其他常量定义如下:

/* 若此文件不存在则创建它 */
#define O_CREAT            0100

/* 若同时指定了O_CREAT且文件已经存在则出错 */
#define O_EXCL             0200

/* 若pathname为终端设备,则不将该设备分配作为此进程的控制终端。 */
#define O_NOCTTY           0400


/* 若此文件存在,且文件可写,则将其截短为0,也就是清除文件所有已存内容 */
#define O_TRUNC           01000

/* 每次写时都追加到文件的尾端 */
#define O_APPEND          02000

#define O_NONBLOCK        04000

#define O_NDELAY        O_NONBLOCK
#define O_SYNC         04010000
#define O_FSYNC          O_SYNC
#define O_ASYNC          020000

文件标识符0、1、2分别代表标准输入、标准输出和标准错误输出,分别用常量STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO代替。

OPEN_MAX表示每个进程最大可以打开的文件数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值