open_close 函数|学习笔记

简介: 快速学习 open_close 函数

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频open_close 函数】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/10975


open_close 函数

 

内容介绍

一、open 函数

二、close 函数

 

一、 open 函数

1.简介

系统调用级的I/O函数提供的接口几个函数都是内核提供的,通过open函数可以打开一个文件,open函数是由内核提供的

#include < sys / types . h >

#include < sys / stat . h >

#include fcntl . h >

需要包含这几个同文件

2.文件调用方式

①当文件存在时使用:

int open ( const char* pathname , int flags );

第一个参数char* pathname是打开文件的路径,相对路径绝对路径都可以,int flags是一个整形的,整形的flag其实就是打开的方式,F/open可以用只读的方式打开以只写的方式打开以可读可写的方式打开,这是打开方式,注意打开文件时会返回一个整数,如果打开成功就返回一个文件描述符,文件描述符返回值代表了打开的文件在进程当中,以后对这个文件进行读写时对文件描述符进行操作。

②当文件不存在时使用:

int open ( const char * pathname , int flags , mode _ t mode );

如果不存在会新建一个文件,如果存在就直接打开了,在新建文件时每个文件都有权限,可读可写可执行,mode就是那个文件的权限。同样会返回文件描述符那个文件描述符就代表了创建的并且打开的文件

③参数:

pathname ;文件的路径及文件名。

flags : open 函数的行为标志。

mode :文件权限(可读、可写、可执行)的设置。

④返回值:

成功返回打开的文件描述符

失败返回-1,可以利用perror去查看原因

3.flags的取值及其含义

O_RDONLY 以只读的方式打开

O_ WRONLY 以只写的方式打开

O_RDWR 以可读、可写的方式打开

所以open这个函数在用的时候应该首先定义一个变量,变量将来接一下文件描述符,第一个参数是文件的路径,当前目录下的test.txt文件路径,第二个参数是O_RDONLY以只读的方式打开这个文件得到一个文件描述符判断一下,如果fd=-1代表打开失败,就可以perror传一个open进来,将来打印出错信息时先打open后面跟着真正的出错信息,返回0结束程序。

int fd ;

fd = open ("./ test . txt ",0 RDONLY );

if ( fd ==-1)

perror (" open ");

return 0;

注意这个是把常量直接放在这,可以直接chat*path,初始化一下,直接放一个指针变量path也行。打开这个文件以只读的方式打开

int fd ;

char * path ="./ test . txt ";

fd = open ( path ,0 RDONLY )

if ( fd ==-1)

perror (" open "");

return 0;

这是以只读的方式打开,还有只写,可读可写的打开方式

flags除了取上数值之外,还可以与下列值位或

O _CREAT 文件不存在则创建文件,使用此选项时需使用  mode说明文件的权限

O _EXCL如果同时指定了0_CREAT,且文件已经存在,则出错

O _TRUNC如果文件存在,则清空文件内容

O_ APPEND写文件时,数据添加到文件末尾

0_NONBLOCK当打开的文件是FIF0、字符文件、块文件时,此选项为非阻塞标志位

①O _CREAT用法

open打开时可能会有int open ( const char * pathname , int flags , mode _ t mode );这种方式,没有回帮助创建,如果是这样的话写一下调用代码,同样要定义变量fd open打开这个文件的路径,以只写的方式打开,如果文件不存在按位或,第三个参数式是0666,666换算成二进制是110110110,以0开头是八进制,文件拥有可读可写不可执行,这是拥有者同组用户,其他用户的权限

int fd ;

char * path ="./ test . txt ";

fd = open ( path ,0_ WRONLYIO _ CREAT ,0666);//110110110

//如果文件存在的话,直接打开文件

//如果文件不存在的话,创建文件并打开

②O _EXCL:

一般是检查文件是否存在的,指定了O _CREAT又指定了O _EXCL,打开文件以只写的方式打开,如果没有去新建文件并且检查文件是否存在然后0666新建了文件,这种情况下如果文件存在则open一定会失败,如果文件不存在open可能成功,返回文件描述符。

而上面那种只有O _CREAT的时候如果文件存在直接打开文件,如果文件不存在创建文件并打开,可能因为其他原因失败。但下面这个open加了O _EXCL参数,只有文件存在,open一定会失败。

int fd ;

char * path ="./ test . txt ";

fd = open ( path ,0_ WRONLYIO _ CREATIO _ EXCL ,0666);//110110110

//如果文件存在,则 open 一定会失败

//如果文件不存在的话, open 可能成功,返回文件描述符

③O _TRUNC

F/open双引号里只要带W就是打开文件并清空,文件不存在帮你新建,文件存在帮你清空再打开

④O_ APPEND

如果flags可以按位或上O_ APPEND相当于打开文件时在文件的末尾

0_NONBLOCK:

blok是阻塞,打开文件时可以以阻塞的方式打开,也可以是非阻塞方式NONBLOCK就是非阻塞,讲解命名管道时会用到这一个选项。以非阻塞方式打开去read时有东西就读,没东西也不会停在那一直等,这是非阻塞将来会讲,现在先不讲那么细致。

4.mode 的取值和含义

前四个红有一个特点,都在第三位上,7是111,4是01110,2是010,1是001,这几个红可以按位或,相当于0***,八进制相当于第一个*,可以用这几个红给第一个*按位或赋值。

中间几个在倒数第二个位置,按位或0***,给倒数第二个赋值。

这三组红一组在第三个位置上,一组在倒数第二个位置上,一组在最后一个位置上,可以直接用0***代替mode

SIRWXU  00700  文件所有者的读、写、可执行权限

S IRUSR  00400  文件所有者的读权限

S IWUSR  00200  文件所有者的写权限

S IXUSR  00100  文件所有者的可执行权限

SIRWXG  00070  文件所有者同组用户的读、写、可执行权限

SIRGRP  00040 文件所有者同组用户的读权限

SIWGRP  00020 文件所有者同组用户的写权限

SIXGRP  00010 文件所有者同组用户的可执行权限

SIRWXG  00070 文件所有者同组用户的读、写、可执行权限

SIRGRP  00040 文件所有者同组用户的读权限

SIWGRP  00020 文件所有者同组用户的写权限

SIXGRP  00010 文件所有者同组用户的可执行权限

SIRWXO  00007 其他组用户的读、写、可执行权限

S IROTH  00004其他组用户的读权限

SIWOTH 00002 其他组用户的写权限

S IXOTH 0000 其他组用户的可执行权限

 

二、 close 函数

1.简介

close相对较简单,与fclose差不多,要想关闭一个文件传出文件对应的文件描述符就行,就会将fd所代表的文件关掉,返回一个整形。

关闭一个文件

# include < unistd . h >

int close ( int fd );

参数:

fd 是调用 open 打开文件返回的文件描述符。

返回值:

成功返回0。

失败返回﹣1,可以利用 perror 去查看原因。

2.在程序中关闭文件方法:

如果让fd代表那个文件描述符定义一个变量err,close关闭fd所代表的文件,如果err不等于零关闭失败,打印出错信息,先打传进去的字符串,后面跟着真正出错的信息。

int err ;

err = close ( fd );

if ( err !=0)

perror (" close ");

return 0;

相关文章
|
8月前
|
安全 Python
Python中文件操作的详细使用:open()、os.open()和with open()
Python中文件操作的详细使用:open()、os.open()和with open()
90 0
|
2月前
|
网络协议 Linux API
Linux网络编程:shutdown() 与 close() 函数详解:剖析 shutdown()、close() 函数的实现原理、参数说明和使用技巧
Linux网络编程:shutdown() 与 close() 函数详解:剖析 shutdown()、close() 函数的实现原理、参数说明和使用技巧
91 0
|
23天前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
88 4
|
8月前
|
缓存 Windows
【cmd报错:Error :could not open】
【cmd报错:Error :could not open】
136 0
|
8月前
|
存储 C++
close()关闭文件方法
我们知道,调用 open() 方法打开文件,是文件流对象和文件之间建立关联的过程。那么,调用 close() 方法关闭已打开的文件,就可以理解为是切断文件流对象和文件之间的关联。注意,close() 方法的功能仅是切断文件流与文件之间的关联,该文件流并会被销毁,其后续还可用于关联其它的文件。 close() 方法的用法很简单,其语法格式如下: void close( ) 可以看到,该方法既不需要传递任何参数,也没有返回值。 举个例子: #include <fstream> using namespace std; int main() {
86 0
|
11月前
|
Python
open函数和 write函数
open函数和 write函数
76 0
|
Linux
Linux系统调用二、open()函数与close()函数介绍
Linux系统调用二、open()函数与close()函数介绍
290 0
Linux系统调用二、open()函数与close()函数介绍
|
物联网 Linux 开发者
Write 函数|学习笔记
快速学习 Write 函数
178 0
|
数据库 安全 数据库连接
EF "There is already an open DataReader associated with this Command which must be closed first."
1.出现问题 场景1:在插入数据之前,先进行判断是否存在 执行SqlDataReader.Read之后,如果还想用另一个SqlCommand执行Insert或者Update操作的话, 会得到一个错误提示:There is already an open DataReader associated with this Command which must be closed first.   2.解决方法 在ConnectionString中加上一个参数“MultipleActiveResultSets”, 将其值设置为true。
3617 0
open函数: 可以帮助我们获取文件对象 内置函数 open(file, mode='r', buffering=-1, encoding=None, errors=None
open函数: 可以帮助我们获取文件对象 内置函数 open(file, mode='r', buffering=-1, encoding=None, errors=None