文件编程

  • 打开/创建文件
  • 写入文件
  • 读取文件
    • 文件光标位置

打开/创建文件

函数原型

 //头文件#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系统编程(文件)———文件打开/创建、写入、读取相关推荐

  1. Linux系统编程之文件IO

    Linux系统编程之文件IO 文件IO第一天 一.标准IO基本概念 1.1c语言函数 (c库函数) 调用实现某一个功能,(API) 1.2系统调用:内核中的程序接口,应用程序和硬件设备之间的中间层 1 ...

  2. 【Linux系统编程】文件描述符的复制dup()和dup2()

    00. 目录 文章目录 00. 目录 01. 文件描述符复制概述 02. 常用函数 2.1 dup函数 2.2 dup2函数 03. 案例实战 3.1 dup示例 3.2 dup2示例 04. 附录 ...

  3. linux系统编程之文件与I/O(六):fcntl 函数与文件锁

    2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报  分类: linux系统编程(19)  版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...

  4. linux系统io编程,Linux系统编程(1) —— 文件IO

    本文主要对Linux系统中文件I/O的基本操作进行说明. 在Linux系统编程中,对文件进行处理的流程,通常是: 打开文件 读写文件 关闭文件 Linux内核对每一个进程维护一个打开的文件列表, 该文 ...

  5. 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)

    文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...

  6. Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】

    linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...

  7. linux文件读取程序,Linux系统编程:文件的读取写入

    一.read系统调用 一旦有了与一个打开文件描述相关连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节 函数原型: ssize_t ...

  8. [Linux系统编程]_文件编程(一)

    嵌入式之路,贵在日常点滴 ---阿杰在线送代码 目录 一.系统调用 1.1 什么是系统调用 1.2 什么是库函数 1.3 将hello写入到文件1.txt流程 1.4 为什么要有缓冲区(补充) 1.5 ...

  9. 【Linux系统编程】文件IO操作

    文件描述符 在 Linux 的世界里,一切设备皆文件.我们可以系统调用中 I/O 的函数(I:input,输入:O:output,输出),对文件进行相应的操作( open().close().writ ...

最新文章

  1. MultipartFile(文件的上传)--CommonsMultipartResolver
  2. 首批互联网地图服务牌照发放 图吧地图获得甲级服务资质
  3. 牛人 20000 字的 Spring Cloud 总结,太硬核了~
  4. (转) 对svn分支合并类型和深度的理解
  5. python通过手机抓取微信公众号
  6. L. Continuous Intervals(单调栈 + 线段树 + 思维)
  7. 关于缓存穿透,缓存击穿,缓存雪崩,热点数据失效问题的解决方案(转)
  8. 力扣844,比较含退格的字符串(JavaScript)
  9. thinkpad 使用技巧
  10. node代理请求 vue_vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址...
  11. 「黑科技」增加栈的空间
  12. 二级路由添加网络打印机的方法
  13. python做表格教程_(0基础如何快速入门Python)python表格入门教程
  14. CCU ETL脚本列表
  15. 2020南京航空航天大学计算机科学与技术学院软件工程复试/面试经验分享
  16. 关于GIT怎么将本地仓库和远程仓库进行关联
  17. 七彩虹显卡软件测试,【七彩虹FM2A75评测】多款软件测试-中关村在线
  18. 中国移动物联卡用户超2600万 目标2020年物联网收入规模达千亿
  19. 达梦数据库常用函数——字符串函数
  20. MongoDB数据库常用SQL命令

热门文章

  1. 大学计算机教授的工资多少,大学教授的收入大概有多少?很多人都不知道!
  2. 参加历年CTF大赛(2022年起持续更新)
  3. 我与酷派手机N900+的艰难之旅
  4. Linux 挂2个磁盘会影响io,linux2.6.37内核接两个硬盘导致读写效率变低的问题
  5. 挂载nfs提示:mount.nfs: access denied by server while mounting...
  6. SpringIOC容器 Bean初始化和销毁回调
  7. 数值积分方法:欧拉积分、中点积分和龙格-库塔法积分
  8. [图解教程] 服务器如何构建虚拟机?想拥有一台未来的主机吗?快来看本文如何操作吧~
  9. 双十一临近,京东出奇招,摆摊卖娃娃
  10. 霍尔信号、编码器信号与电机转向