Linux文件IO操作之IO编程(一)
Linux文件IO操作之IO编程(一)
- 1.文件操作(系统I/O)
- 1.1.打开文件open
- 1.2.关闭文件close
- 1.3.从文件读数据read
- 1.4.向文件写数据write
- 1.5.调整文件位置lseek
- 1.6.参考代码
- 2.文件操作(标准I/O)
- 2.1.打开文件fopen()
- 2.2.关闭文件fclose
- 2.3.从文件读数据fread
- 2.4.向文件写数据fwrite
- 2.5.调整文件位置fseek
- 2.6.获取指定文件的当前位置ftell
- 2.7.将指定文件的当前位置偏移量设置到文件开头处rewind
- 2.8.参考代码
1.文件操作(系统I/O)
1.1.打开文件open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:
打开文件,如果文件不存在则可以选择创建。
参数:
pathname:文件的路径及文件名
flags:打开文件的行为标志,必选项 O_RDONLY, O_WRONLY, O_RDWR
mode:这个参数,只有在文件不存在时有效,指新建文件时指定文件的权限
返回值:
成功:成功返回打开的文件描述符
失败:-1
flags详细说明
必选项:
取值 | 含义 |
---|---|
O_RDONLY | 以只读的方式打开 |
O_WRONLY | 以只写的方式打开 |
O_RDWR | 以可读、可写的方式打开 |
可选项,和必选项按位或起来
取值 | 含义 |
---|---|
O_CREAT | 文件不存在则创建文件,使用此选项时需使用mode说明文件的权限 |
O_EXCL | 如果同时指定了O_CREAT,且文件已经存在,则出错 |
O_TRUNC | 如果文件存在,则清空文件内容 |
O_APPEND | 写文件时,数据添加到文件末尾 |
O_NONBLOCK | 对于设备文件, 以O_NONBLOCK方式打开可以做非阻塞I/O |
1.2.关闭文件close
int close(int fd);
功能:
关闭已打开的文件
参数:
fd : 文件描述符,open()的返回值
返回值:
成功:0
失败: -1, 并设置errno
1.3.从文件读数据read
ssize_t read(int fd, void *buf, size_t count);
功能:
把指定数目的数据读到内存(缓冲区)
参数:
fd : 文件描述符
buf : 内存首地址
count : 读取的字节个数
返回值:
成功:实际读取到的字节个数
失败: - 1
1.4.向文件写数据write
ssize_t write(int fd, const void *buf, size_t count);
功能:
把指定数目的数据写到文件(fd)
参数:
fd : 文件描述符
buf : 数据首地址
count : 写入数据的长度(字节)
返回值:
成功:实际写入数据的字节个数
失败: - 1
1.5.调整文件位置lseek
off_t lseek(int fd, off_t offset, int whence);
功能:
调整文件位置偏移量
参数:
fd : 文件描述符
offset:相对基准点的偏移大小
whence : 基准点
返回值:
成功:新文件位置偏移量(相对于文件开头的偏移)
失败: - 1
whence 详细说明
取值 | 含义 |
---|---|
SEEK_SET | 文件开头处 |
SEEK_CUR | 当前位置 |
SEEK_END | 文件末尾处 |
1.6.参考代码
//=============================================================================
// File Name : IO_programme_1.c
// Author : FengQQ
//
// Description : 非缓冲文件系统IO操作
// Annotation :
//
// Created by FengQQ. 2020-9-24
//=============================================================================
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc,char* argv[])
{int ret;int fd;unsigned long file_size;char wr_buf[100] = "hello world,my name is caiji";char rd_buf[100];fd = open("test1.txt",O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IROTH);//打开文件if(fd < 0){printf("open file error...\r\n"); return -1;}ret = write(fd,wr_buf,sizeof(wr_buf)); //写入数据if(ret < 0){printf("write file error...\r\n"); return -1;}lseek(fd,0,SEEK_SET);ret = read(fd,rd_buf,sizeof(rd_buf)); //读取数据if(ret < 0){printf("read file error...\r\n"); return -1;}printf("rd_buf = %s\r\n", rd_buf); //打印数据 file_size = lseek(fd,0,SEEK_END); //获取指定文件的当前位置偏移量if(file_size < 0){printf("file_size error...\r\n");}printf("file_size = %lu\n", file_size); //打印当前文件大小close(fd); //关闭文件return 0;
}
2.文件操作(标准I/O)
2.1.打开文件fopen()
FILE *fopen(const char *path, const char *mode);
功能:
获取指定文件的文件指针。
参数:
path:要打开的文件的路径名称
mode:打开文件的行为标志
返回值:
成功:文件指针
失败:NULL
mode详细说明
必选项:
取值 | 含义 |
---|---|
“r” | 以只读方式打开文件,要求文件必须存在。 |
“r+” | 以读写方式打开文件,要求文件必须存在。 |
“w” | 以只写方式打开文件,文件如果不存在将会创建新文件,如果存在将会将其内容清空。 |
“w+” | 以读写方式打开文件,文件如果不存在将会创建新文件,如果存在将会将其内容清空。 |
“a” | 以只写方式打开文件,文件如果不存在将会创建新文件,且文件位置偏移量被自动定位到文件末尾(即以追加方式写数据)。 |
“a+” | 以读写方式打开文件,文件如果不存在将会创建新文件,第一次用于写数据则文件位置偏移量被自动定位到文件末尾(即以追加方式写数据),如果第一次用于读数据,文件位置偏移位置会定位到文件开始。 |
2.2.关闭文件fclose
int fclose(FILE *fp);
功能:
闭指定的文件并释放其资源
参数:
fp : 即将要关闭的文件
返回值:
成功:0
失败: EOF
2.3.从文件读数据fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从指定文件读取若干个数据块
参数:
ptr : 自定义缓冲区指针。
size : 数据块大小
nmemb : 数据块个数
stream : 即将被读取数据的文件指针
返回值:
成功:读取的数据块个数,等于 nmemb
失败: 读取的数据块个数,小于 nmemb 或等于 0
2.4.向文件写数据fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:
将若干块数据写入指定的文件
参数:
ptr : 自定义缓冲区指针。
size : 数据块大小
nmemb : 数据块个数
stream : 即将被写入数据的文件指针
返回值:
成功:写入的数据块个数,等于 sinmembze
失败: 写入的数据块个数,小于 nmemb 或等于 0
2.5.调整文件位置fseek
int fseek(FILE *stream, long offset, int whence);
功能:
设置指定文件的当前位置偏移量
参数:
stream: 需要设置位置偏移量的文件指针
offset:新位置偏移量相对基准点的偏移
whence : 基准点
返回值:
成功:0
失败: - 1
whence 详细说明
取值 | 含义 |
---|---|
SEEK_SET | 文件开头处 |
SEEK_CUR | 当前位置 |
SEEK_END | 文件末尾处 |
2.6.获取指定文件的当前位置ftell
long ftell(FILE *stream);
功能:
获取指定文件的当前位置偏移量
参数:
stream : 需要返回当前文件位置偏移量的文件指针
返回值:
成功:当前文件位置偏移量
失败:-1
2.7.将指定文件的当前位置偏移量设置到文件开头处rewind
void rewind(FILE *stream);
功能:
将指定文件的当前位置偏移量设置到文件开头处
参数:
stream : 需要设置位置偏移量的文件指针
返回值:
无
2.8.参考代码
//=============================================================================
// File Name : IO_programme_2.c
// Author : FengQQ
//
// Description : 缓冲文件系统IO操作
// Annotation :
//
// Created by FengQQ. 2020-9-24
//=============================================================================
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main(int argc,char* argv[])
{int ret;FILE *fp;unsigned long file_size;char wr_buf[100] = "hello world,my name is caiji";char rd_buf[100];fp = fopen("test2.txt","a+"); //打开文件:文件追加,可读可写,文件不存在则创建if(fp == NULL){printf("fopen file error...\r\n"); return -1;}ret = fwrite(wr_buf,sizeof(wr_buf),1,fp); //写入数据if(ret < 0){printf("fwrite file error...\r\n"); return -1;}rewind(fp); //将文件的当前位置偏移量设置到文件开头处 ret = fread(rd_buf,sizeof(rd_buf),1,fp); //读取数据if(ret < 0){printf("fread file error...\r\n"); return -1;}printf("rd_buf = %s\r\n", rd_buf); //打印数据 ret = fseek(fp, 0, SEEK_END); //设置指定文件的当前位置偏移量:SEEK_CUR:当前位置 ; SEEK_END:文件末尾处if(ret < 0){printf("fseek file error...\r\n"); }file_size = ftell(fp); //获取指定文件的当前位置偏移量if(file_size < 0){printf("file_size error...\r\n");}printf("file_size = %lu\n", file_size); //打印当前文件大小fclose(fp); //关闭文件return 0;
}
Linux多任务编程之进程(二)
链接: link.(https://blog.csdn.net/qq_39721016/article/details/119204626?spm=1001.2014.3001.5501)
Linux文件IO操作之IO编程(一)相关推荐
- Linux程序文件状态,linux 文件状态标识和IO操作方式
转自:http://book.2cto.com/201212/11767.html 来自<UNIX/Linux程序设计教程> 文件状态标签指明文件的打开属性,它们由open()的flags ...
- java io操作_Java IO 操作
IO操作 Java对数据的操作都是通过流的方式,IO流用来处理设备之间的数据传输,文件上传和文件下载,Java用于操作流的对象都在IO包,NIO(New IO)包中. 创建文件 Java创建文件的方式 ...
- linux文件测试操作
1.文件测试操作 返回 true 如果... -e 文件存在 -a 文件存在 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用 -f file 是一个 regular 文件(不是目录或者 ...
- linux文件怎么操作,linux文件操作学习1
由于实验室的项目需要开始学习linux,为了更好的学习和掌握linux的一些基本操作以及顺便做个备忘录,时间久了也可以看看自己的学习成果. 学习linux应该先抛开windows的C.D.E...盘的 ...
- Linux文件权限操作
权限的意义在于允许某个用户或者某个组以规定的方式去访问某个文件 基本权限: U,G,O这三个字母所代表的意义 U:owner,属主 G:group,属组 O:other,其他用户 UGO方式 Linu ...
- linux文件编辑操作,Linux下文本编辑及其文件操作
文本编辑及其文件操作 Vim 命令模式: dd 删除当前行 yy 2yy nyy 复制 从光标算起,复制n行 p 粘贴 默认粘贴在光标的下一行 u 撤销 末行模式: :wq 保存退出 :wq! 强制保 ...
- linux 文件路径操作
查看文件&路径 ls 查看名称 ll 查看详细信息 移动文件&路径 命令格式 运行结果 mv 文件名 文件名 将源文件名改为目标文件名 mv 文件名 目录名 将文件移动到目标目录 mv ...
- Linux文件读取操作:read函数的使用
read函数作用:读取文件内容,读取打开/创建(open)文件中写入(write)的内容. 包含的头文件: #include <unistd.h> 函数原型: ssize_t read(i ...
- linux文件查找操作
1. 在当前目录及子目录中,查找大写字母开头的txt文件 指令: $ find . -name '[A-Z]*.txt' -print 2.在/etc及其子目录中,查找host开头的文件 ...
- linux 遍历文件及文件夹,linux文件夹操作及递归遍历文件夹(示例代码)
文件夹相关函数介绍 //mkdir 函数创建文件夹 #include #include int mkdir(const char *pathname, mode_t mode); //rmdir 删除 ...
最新文章
- 【OpenCV 4开发详解】分割图像——分水岭法
- 解决 Iframe跨域session 丢失问题
- jsp 知乎_JSP
- Discuz!NT 模板机制分析(转)
- table类型数据提交_OGG数据同步异常问题总结
- oracle插入未调用并行,oracle并行之概念篇
- 利用类定义一个指针会调用默认构造函数吗_C++的拷贝构造函数
- 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp
- memcache的资料集
- string输出逗号前半部分java_JVAV从入门到放弃 第二天 java HelloWorld.java
- 数据库安全性控制(授权:授予与收回)
- PAT刷题集(乙级)1003 我要通过!(20 分)
- 一篇文章看懂三种存储方式DAS、NAS、SAN
- 无锡设计培训——室内设计的三色原则
- linux三国杀,三国杀!Linux、openSUSE和Ubuntu对比
- java 使用GeoTools工具 geojson 与shp 相互转换
- 安卓 root权限笔记
- 远峰科技“梦碎”科创板:资产负债率高企,主要产品价格下降
- AutoHotkey实现赛尔号自动换背包精灵
- 游戏 NFT 市场:Opensea 最容易切的蛋糕
热门文章
- MFC——SetTimer函数的用法
- 介质天线的设计原理_以水为媒介的介质天线的制作方法
- 信息安全技术(黑客攻防) 入门
- 多媒体计算机对信息处理技术包括哪些,多媒体信息处理技术
- 多元统计分析基于r课后答案_智慧树多元统计分析及R语言建模课后答案
- Windows API一日一练(17)DialogBox和DialogBoxParam函数
- 微型计算机控制第三版,清华大学出版社-图书详情-《微型计算机控制技术(第3版)》...
- 单片机原理及应用姜志海pdf_单片机原理及应用.pdf
- 自己研发的系统给rtx发消息
- 用VC++自制王码五笔输入法安装包(转)