Linux系统编程(文件)———文件打开/创建、写入、读取
文件编程
- 打开/创建文件
- 写入文件
- 读取文件
- 文件光标位置
打开/创建文件
函数原型
//头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);int creat(const char *pathname, mode_t mode);
pathname:是要打开的文件名(含路径,缺省为当前路径)
flags:
O_RDONLY 只读权限
O_WRONLY 只写权限
O_RDWR 可读可写权限
当我们附带权限后,打开的文件就只能按照这种权限来操作。
以上三这3个权限只能指定一个,下列权限是可选择的:
O_CREAT : 文件不存在则创建它,使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。
O_EXCL:如果同时指定了O_CREAT,则文件已经存在,则出错。
O_TRUNC:被打开的文件存在并且是以可写的方式打开的,则清空文件原有的内容。
O_APPEND:每次写都加到文件的尾部。
Mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件的访问权限。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{int fd;fd = open("./file1",O_RDWR);if(fd == -1){printf("open file1 failed\n");fd = open("./file1",O_RDWR|O_CREAT,0600);if(fd > 0){printf("create file1 success\n");}}printf("fd = %d\n",fd);return 0;
}
这里写一个简单的程序
1.首先程序必须包含头文件
2.定义一个fd来接收open的返回值
当程序有成功打开,返回一个非负整数
当程序没有则返回-1
3.打开file1文件,这里是没有file1文件所以open返回-1,
4.接着继续打开file1,这里没有就创建file1,以可读可写权限创建(0600),输出成功。
写入文件
#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);
写入成功,返回写入的字节数
写入失败,返回-1
fd 操作的文件(文件描述符)
buf 无类型的指针,一个缓冲区
count 写入文件的大小
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>int main()
{int fd;char *buf = "Hello Ubuntu!";fd = open("./file1",O_RDWR);if(fd == -1){printf("open file1 failed\n");fd = open("./file1",O_RDWR|O_CREAT,0600);if(fd > 0){printf("create file1 success\n");}}printf("fd = %d\n",fd);write(fd,buf,strlen(buf));close(fd);return 0;
}
这里就是上一个打开/创建文件代码的一个修改。
写入文件
在fd所指向的文件,把buf里的数据拿出来,写入其中,写入大小strlen(buf)
调用write这里需要包含头文件
计算buf的大小strlen也需要包含头文件。 #include <string.h>
最后需要关闭这个文件。(**)
包含头文件 #include <unistd.h>
刚开始没有file1,创建file1,并将buf中的数据写入file1中。
读取文件
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
读取成功,返回读取的字节数
读取失败,返回-1
读取fd中的数据到buf中,读取count个字节。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{int fd;char *buf = "Hello Ubuntu!";fd = open("./file1",O_RDWR);if(fd == -1){printf("open file1 failed\n");fd = open("./file1",O_RDWR|O_CREAT,0600);if(fd > 0){printf("create file1 success\n");}}printf("fd = %d\n",fd);int n_write = write(fd,buf,strlen(buf));if(n_write != -1){printf("write %d bute to filr\n",n_write);}// close(fd);
// fd = open("./file1",O_RDWR);char *readBuf;readBuf = (char *)malloc(sizeof(char)*n_write+1);lseek(fd,0,SEEK_SET);int n_read = read(fd,readBuf,n_write);printf("read %d,context:%s\n",n_write,readBuf);close(fd);return 0;
}
这里输出写入的字节数、读取的字节数和读取的数据。
****这里设计到一个光标的问题
write 之后,光标移动到文件的尾部,最后读取的数据肯定没有,所以这里要把光标移动到文件头,有两种方法:
(1)关闭文件,在打开文件
(2)移动光标到文件头
lseek(fd,0,SEEK_SET);
文件光标位置
#include <sys/types.h>
#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);
offset 对whence的偏移值
whence 固定位置
SEEK_SET 文件头
SEEK_END 文件尾
SEEK_CUR 文件当前位置
最后的结果
首先没有file1文件
创建file1文件
输出fd返回的值
输出写入数据字节数
输出读取文件字节数和数据内容
Linux系统编程(文件)———文件打开/创建、写入、读取相关推荐
- Linux系统编程之文件IO
Linux系统编程之文件IO 文件IO第一天 一.标准IO基本概念 1.1c语言函数 (c库函数) 调用实现某一个功能,(API) 1.2系统调用:内核中的程序接口,应用程序和硬件设备之间的中间层 1 ...
- 【Linux系统编程】文件描述符的复制dup()和dup2()
00. 目录 文章目录 00. 目录 01. 文件描述符复制概述 02. 常用函数 2.1 dup函数 2.2 dup2函数 03. 案例实战 3.1 dup示例 3.2 dup2示例 04. 附录 ...
- linux系统编程之文件与I/O(六):fcntl 函数与文件锁
2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报 分类: linux系统编程(19) 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...
- linux系统io编程,Linux系统编程(1) —— 文件IO
本文主要对Linux系统中文件I/O的基本操作进行说明. 在Linux系统编程中,对文件进行处理的流程,通常是: 打开文件 读写文件 关闭文件 Linux内核对每一个进程维护一个打开的文件列表, 该文 ...
- 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)
文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...
- Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】
linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...
- linux文件读取程序,Linux系统编程:文件的读取写入
一.read系统调用 一旦有了与一个打开文件描述相关连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节 函数原型: ssize_t ...
- [Linux系统编程]_文件编程(一)
嵌入式之路,贵在日常点滴 ---阿杰在线送代码 目录 一.系统调用 1.1 什么是系统调用 1.2 什么是库函数 1.3 将hello写入到文件1.txt流程 1.4 为什么要有缓冲区(补充) 1.5 ...
- 【Linux系统编程】文件IO操作
文件描述符 在 Linux 的世界里,一切设备皆文件.我们可以系统调用中 I/O 的函数(I:input,输入:O:output,输出),对文件进行相应的操作( open().close().writ ...
最新文章
- MultipartFile(文件的上传)--CommonsMultipartResolver
- 首批互联网地图服务牌照发放 图吧地图获得甲级服务资质
- 牛人 20000 字的 Spring Cloud 总结,太硬核了~
- (转) 对svn分支合并类型和深度的理解
- python通过手机抓取微信公众号
- L. Continuous Intervals(单调栈 + 线段树 + 思维)
- 关于缓存穿透,缓存击穿,缓存雪崩,热点数据失效问题的解决方案(转)
- 力扣844,比较含退格的字符串(JavaScript)
- thinkpad 使用技巧
- node代理请求 vue_vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址...
- 「黑科技」增加栈的空间
- 二级路由添加网络打印机的方法
- python做表格教程_(0基础如何快速入门Python)python表格入门教程
- CCU ETL脚本列表
- 2020南京航空航天大学计算机科学与技术学院软件工程复试/面试经验分享
- 关于GIT怎么将本地仓库和远程仓库进行关联
- 七彩虹显卡软件测试,【七彩虹FM2A75评测】多款软件测试-中关村在线
- 中国移动物联卡用户超2600万 目标2020年物联网收入规模达千亿
- 达梦数据库常用函数——字符串函数
- MongoDB数据库常用SQL命令
热门文章
- 大学计算机教授的工资多少,大学教授的收入大概有多少?很多人都不知道!
- 参加历年CTF大赛(2022年起持续更新)
- 我与酷派手机N900+的艰难之旅
- Linux 挂2个磁盘会影响io,linux2.6.37内核接两个硬盘导致读写效率变低的问题
- 挂载nfs提示:mount.nfs: access denied by server while mounting...
- SpringIOC容器 Bean初始化和销毁回调
- 数值积分方法:欧拉积分、中点积分和龙格-库塔法积分
- [图解教程] 服务器如何构建虚拟机?想拥有一台未来的主机吗?快来看本文如何操作吧~
- 双十一临近,京东出奇招,摆摊卖娃娃
- 霍尔信号、编码器信号与电机转向