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;

相关文章
Spooling技术简单熟悉
Spooling技术简单熟悉
273 0
|
7月前
|
传感器 自动驾驶 安全
GPTP时钟授时服务器应用介绍、GPTP时钟、GPTP授时服务器、Gptp时钟
GPTP时钟基于IEEE 802.1AS标准,用于时间敏感网络中的高精度时间同步。系统包含主时钟(如SYN2413型PTP主时钟)和从时钟,通过绝对与相对时间同步实现全网一致性。其工作原理涉及硬件时间戳采样、P2P路径延时测量等技术,确保ns级精度。广泛应用于汽车(自动驾驶、V2X通信)、工业自动化(生产流水线、过程控制)、通信(5G网络、光通信)及智能交通(车路协同、轨道交通)等领域,保障实时性与安全性。文章版权归西安同步所有,严禁侵权。
|
6月前
|
监控 Linux
Linux系统中使用df命令详解磁盘使用情况。
`df`命令是Linux系统管理员和用户监控和管理磁盘空间使用的重要工具。掌握它的基本使用方法和选项可以帮助在必要时分析和解决空间相关问题。简洁但功能丰富,`df`命令确保了用户可以快速有效地识别和管理文件系统的空间使用情况。
483 13
|
监控 Ubuntu Unix
Linux |Nethogs 监控网络使用情况
Linux |Nethogs 监控网络使用情况
Linux |Nethogs 监控网络使用情况
uniapp滑动到一定的高度后固定某个元素到顶部效果demo(整理)
uniapp滑动到一定的高度后固定某个元素到顶部效果demo(整理)
|
安全
FUSE文件系统 【ChatGPT】
FUSE文件系统 【ChatGPT】
|
运维 监控 安全
在Linux中,如何管理和优化日志文件?
在Linux中,如何管理和优化日志文件?
|
Java jenkins 持续交付
Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试
【7月更文挑战第1天】Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试。成功后,Jenkins执行部署任务,发布到服务器或云环境。使用Jenkins能提升效率,保证软件质量,加速上线,并需维护其稳定运行。
318 0
|
安全 程序员 数据库
程序员必知:xadmin快速搭建后台管理系统
程序员必知:xadmin快速搭建后台管理系统
223 0
|
Shell Linux C语言
【Shell 命令集合 系统设置 内置命令】⭐⭐Linux 测量程序的执行时间和资源使用情况 time命令 使用指南
【Shell 命令集合 系统设置 内置命令】⭐⭐Linux 测量程序的执行时间和资源使用情况 time命令 使用指南
310 0