open函数的使用

简述:open是UNIX系统(包括LINUX、Mac等)的系统调用函数,区别于C语言库函数fopen。

#include<fcntl.h>
#include<unistd.h>
int open(constchar*pathname,intflags);
int open(constchar*pathname,intflags,mode_t mode);

返回值:成功则返回文件描述符,否则返回-1

函数参数:
pathname:打开文件的路径名
flags:用来控制打开文件的模式
mode:用来设置创建文件的权限(rwx)。当flags中带有O_CREAT时才有效。
返回值:
调用成功时返回一个文件描述符fd
调用失败时返回-1,并修改errno

flags参数详解: O_RDONLY:只读模式 O_WRONLY:只写模式 O_RDWR:可读可写模式
上面三种模式在flags参数中不能同时出现但必须有一种出现,下面的参数是可选的。
O_APPEND:以后每次写文件时都会先将当前文件偏移量设置到文件末尾,但是读文件时时不影响的
O_CREAT:如果文件不存在则创建,需要使用mode选项。来指明新文件的访问权限
O_EXCL:要打开的文件如果存在则出错,必须要和O_CREAT参数一起使用 O_TRUNC:打开文件的同时将文件中的内容清除
O_NOCTTY:如果打开的文件是终端设备,则不将此设备设置为进程的控制终端
O_NONBLOCK:如果打开的文件是一个管道、一个块设备文件或一个字符设备文件,则后续的I/O操作均设置为非阻塞方式
O_SYNC:使每次write都等到物理I/O操作完成,包括由该write操作引起的文件属性更新所需的I/O。

open函数返回的文件描述符fd一定是未使用的最小的文件描述符。利用这个特性,可以改变0,1,2这三个文件描述符所指向的文件,由于进程默认会打开0,1,2这三个文件描述符,而且指向了键盘和显示器的设备文件。如果在open之前先进行close(1),然后再调用open函数就会返回最小的未使用的fd,也就是1。

如果文件不存在,而且又使用了O_CREAT标志,也就是会创建文件,创建文件时会给文件一定的权限,但是这个权限并不会限制该进程后面对该文件的操作。举个例子,如果创建文件时给的权限是0555,也就是所有用户都没有写的权限。但是程序后面还是可以对文件进行写操作。

当mode参数是由八进制数字给出的时候,如 0777 .要纠正一个错误,就是之前我认为 权限数字前面的 0 代表的是八进制的含义,其实并不是这样的,前面的 0 代表了权限修饰位,也就是set-user-id位、set-group-id位和sticky这三位的权限。

fopen与open的区别
以可写的方式fopen一个文件时,如果文件不存在则会自动创建,而open一个文件时必须明确O_CREAT才会创建文件,否则文件不存在就出错返回

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>

int main()
{
        int fd;
        const char *msg = "hello open";
        char buf[128] = {0};
        fd = open("test.txt", O_WRONLY|O_CREAT|O_APPEND, 0666);
        if(fd < 0)
        {
                perror("open");
                exit(1);
        }

        write(fd, msg, strlen(msg));
        close(fd);
        fd = open("test.txt", O_RDONLY);
        if(fd < 0)
        {
                perror("open");
                exit(1);
        }
        read(fd, buf, sizeof(buf));
        printf("read: %s", buf);
        return 0;
}

open()函数是Python内置的用于打开文件的函数。它接受一个文件路径作为参数,并返回一个文件对象。 使用open()函数的一般语法如下: ``` file_object = open(file_path, mode) ``` 其中,`file_path`是文件的路径,可以是相对路径或绝对路径。`mode`是可选参数,用于指定文件打开的模式,默认为'r'(只读模式)。 open()函数支持以下常用的文件打开模式: - 'r': 只读模式(默认)。文件指针位于文件的开头,如果文件不存在会抛出FileNotFoundError异常。 - 'w': 写入模式。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。 - 'a': 追加模式。文件指针位于文件末尾,如果文件不存在则创建新文件。 - 'x': 创建模式。创建新文件,如果文件已存在则抛出FileExistsError异常。 - 'b': 二进制模式。与上述模式结合使用,用于处理二进制文件。 - 't': 文本模式(默认)。与上述模式结合使用,用于处理文本文件。 例如,要以只读模式打开名为"example.txt"的文本文件并读取内容,可以使用以下代码: ``` file = open("example.txt", "r") content = file.read() print(content) file.close() ``` 需要注意的是,打开文件后要记得关闭文件对象,以释放系统资源。可以使用`close()`方法来关闭文件。 除了使用`open()`和`close()`方法,还有其他一些文件对象的方法可以用于读取或写入文件内容,如`readline()`、`readlines()`、`write()`等。可以根据具体需求选择适合的方法来操作文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值