本文内容主要讲解Linux C read、write、creat、open等函数的应用实例,包括:

  • 打开文件
  • 循环读取文件所有内容
  • 循环将大文本写入文件
  • 拷贝文件

头文件:io_basic.h

/** io_basic.h**  Created on: 2015年7月20日*      Author: alex*/#ifndef IO_BASIC_H_
#define IO_BASIC_H_/*============================================================================Name        : IO_Operation.cAuthor      : 王玉春Version     :Copyright   : 禁止用于商业行为Description : Hello World in C, Ansi-style============================================================================*/
//以O_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件
int open_file(const char* filename);
//以O_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件
int open_file_create(const char* filename) ;
//以O_RDONLY,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件
int open_file_rd(const char* filename) ;
//创建文件
int create_file(const char* filename) ;
//读取文件
void read_file(const char* filename) ;
//写入文件
void write_file(const char* filename) ;
//拷贝文件
void cp_file(const char * src_file, const char * des_file) ;#endif /* IO_BASIC_H_ */

文件主体:io_basic.c

/*============================================================================Name        : IO_Operation.cAuthor      : 王玉春Version     :Copyright   : 禁止用于商业行为Description : Hello World in C, Ansi-style============================================================================*/#include <stdio.h>
#include <stdlib.h>#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>#include "util.h"
#include "io_basic.h"const char* filename = "resources/test.txt";
const char* filename2 = "resources/test2.txt";int open_file(const char* filename) {return open_file_create(filename);
}int open_file_create(const char* filename) {int fd; //文件描述符//O_WRONLY  只写//O_RDONLY    只读//O_RDWR      读写//S_IRUSR(S_IREAD)    文件拥有者具备读权限//S_IWUSR(S_IWRITE)   文件拥有者具备写权限//S_IXUSR(S_IEXEC)    文件拥有者具备可执行权限//S_IRGRP   用户组具备读权限//S_IWGRP   用户组具备写权限//S_IXGRP       用户组具备可执行权限//S_IROTH 其他用户具备读权限//S_IWOTH  其他用户具备写权限//S_IXOTH      其他用户具备可执行权限fd = open(filename, O_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH);//判断文件是否操作成功,-1表示操作失败if (fd == -1) {printf("\nopen_file:文件操作失败");return -1;}printf("\nopen_file:文件操作成功");return fd;
}int open_file_rd(const char* filename) {int fd; //文件描述符//O_WRONLY  只写//O_RDONLY    只读//O_RDWR      读写//S_IRUSR(S_IREAD)    文件拥有者具备读权限//S_IWUSR(S_IWRITE)   文件拥有者具备写权限//S_IXUSR(S_IEXEC)    文件拥有者具备可执行权限//S_IRGRP   用户组具备读权限//S_IWGRP   用户组具备写权限//S_IXGRP       用户组具备可执行权限//S_IROTH 其他用户具备读权限//S_IWOTH  其他用户具备写权限//S_IXOTH      其他用户具备可执行权限fd = open(filename, O_RDONLY,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH);//判断文件是否操作成功,-1表示操作失败if (fd == -1) {printf("\nopen_file:文件操作失败");return -1;}printf("\nopen_file:文件操作成功");return fd;
}int create_file(const char* filename) {int fd; //文件描述符fd = creat(filename, 0664);//判断文件是否操作成功,-1表示操作失败if (fd == -1) {printf("\ncreate_file:文件操作失败");return -1;}printf("\ncreate_file:文件操作成功");return fd;
}void read_file(const char* filename) {int fd = open_file(filename);//打印文件描述符
//  printf("\nread_file.fd = %d", fd);//缓存数组char buf[255];//单次从文件读取到的字符长度ssize_t rNum = 0;printf("\nrNum:%d", rNum);//读取文件中所有内容while (rNum = read(fd, buf, RD_UNIT_SIZE)) {printf("\n---------------------------------------");if (rNum == -1) {
//          if (errno == EINTR){
//              continue;
//          }printf("\nread_file文件操作失败");close(fd);return;} else {if (rNum > 0) {//文件读取成功} else {//文件读取完毕,到达文件结尾EOF}}}printf("\n文件读取完毕,打印文件内容:\n");//   int i;
//  for (i=0; i<GET_ARRAY_LEN(buf); i++){
//      printf("%c", buf[i]);
//  }printf("文件内容:%s", buf);close(fd);
}void write_file(const char* filename) {char buf[] ="while ((wNum = write(fd, buf_pointer, 2)) && tNum<GET_ARRAY_LEN(buf)-1)中文{dfsdafdsawe823uik";int fd = open_file(filename);//打印文件描述符printf("\nread_file.fd = %d", fd);//单次写入到文件的字符长度ssize_t wNum = 0;//已经写入文件的总字符长度ssize_t tNum = 0;char *buf_pointer = buf + tNum;printf("\nGET_ARRAY_LEN(buf)=%d", GET_ARRAY_LEN(buf));//读取文件中所有内容while ((wNum = write(fd, buf_pointer, WR_UNIT_SIZE))&& tNum < GET_ARRAY_LEN(buf) - 1) {
//      printf("\n---------------------------------------");if (wNum == -1) {printf("\nwrite_file文件操作失败");close(fd);return;} else {if (wNum > 0) {//文件写入成功tNum += wNum;buf_pointer += wNum;//              printf("\ntNum=%d, wNum=%d", tNum, wNum );} else {//文件写入完毕}}}printf("\n文件写入完毕\n");close(fd);
}void cp_file(const char * src_file, const char * des_file) {int fd_src = open_file_rd(src_file);int fd_des = open_file_create(des_file);//打印文件描述符//  printf("\nread_file.fd = %d", fd);//缓存数组char buf[RDWR_UNIT_SIZE];//单次从文件读取到的字符长度ssize_t rNum = 0;//     printf("\nrNum:%d", rNum);printf("开始拷贝文件:\n");//读取文件中所有内容while (rNum = read(fd_src, buf, RDWR_UNIT_SIZE)) {printf(".");if (rNum == -1) {//          if (errno == EINTR){//                continue;//         }printf("\ncy_file文件操作失败");close(fd_src);return;} else {if (rNum > 0) {//文件读取成功,将读取的内容写入目标文件ssize_t wNum = write(fd_des, buf, RDWR_UNIT_SIZE);if (wNum == -1) {printf("\ncp_file文件操作失败");close(fd_des);return;} else {if (wNum > 0) {//文件写入成功} else {//文件写入完毕}}} else {//文件读取完毕,到达文件结尾EOF}}}printf("\n文件拷贝完毕\n");close(fd_src);close(fd_des);
}int main(void) {puts("Linux I/O操作"); /* prints Linux I/O操作 *///  write_file(filename2);
//  cp_file(filename, filename2);create_file("test3.txt");//("resources/test_createfile.txt");return EXIT_SUCCESS;
}

Linux C read、write、creat、open等函数应用实例相关推荐

  1. linux文件编程(open、write、read、creat、lseek函数)

    文件编程内容比较多,如文件系统原理及访问机制文件在内核中的管理机制,什么是文件信息节点iNode.文件共享.文件权限.各种用户对其权限等等.以下主要记录如何用代码操作文件,实现文件的创建.打开.编辑等 ...

  2. linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf

    Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...

  3. 三种睡眠时间函数的区别:linux 的sleep()、usleep()、nanosleep()函数

    三种睡眠时间函数的区别:linux 的sleep().usleep().nanosleep()函数 (1)sleep()-------以秒为单位 unsigned int sleep(unsigned ...

  4. linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...

    原标题:Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动 2.3 函数实现机制 2.3.1 Linux 字符设备驱动 在linux 3.5.4中,用结构体cdev描述字符设备,cde ...

  5. ​Linux下C如何调用PCI Lib函数

    Linux下C如何调用PCI Lib函数 在Linux下,可以通过"setpci"和"setpci"命令来访问PCI设备的配置空间,那么能否用程序来访问PCI ...

  6. linux 设备数 of,linux下devicetree中惯用的of函数

    linux下devicetree中常用的of函数 从device_node中获取信息: int of_property_read_u8_array(const struct device_node * ...

  7. linux c中字符替换函数,Linux C 支持正则表达式的字符串替换函数

    [root@localhost src]# cat a.c /** * Linux C 支持正则表达式的字符串替换函数 * * Author: cnscn@163.com * Homepage: ww ...

  8. linux c 删除文件,linux c remove 删除文件或目录函数

    linux c remove 删除文件或目录函数 头文件:#include remove()函数用于删除指定的文件,其原型如下: int remove(char * filename); [参数]fi ...

  9. Linux SPI驱动学习——调用SPI读写函数

    Linux SPI驱动学习--调用SPI读写函数 博客说明 开发环境 1. 基于W25Q16型FLASH来看SPI的读写函数 附录 博客说明 撰写日期 2019.10.25 完稿日期 未完稿 最近维护 ...

  10. linux 创建线程函数吗,[笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include #define CreateThreadEx(tid,threadFun,args) ...

最新文章

  1. mybatis 思维导图,让 mybatis 不再难懂(二)
  2. Windows下调试PostGreSQL源码第一步 - 下载和编译源码、构造VS工程
  3. Leetcode1963. 使字符串平衡的最小交换次数[C++题解]:贪心
  4. 一篇非常有用的文章-《台湾清华彭明辉教授的研究生手册》
  5. NUC1373 Bank Interest【水题】
  6. easy and hard things
  7. github-share报错无法读取远程仓库
  8. matplotlib 柱状图_Matplotlib数据可视化:柱状图与直方图
  9. 网上书店动态网页设计
  10. android源码学习-Handler机制及其六个核心点
  11. 从期刊层面看科研!计算机顶级期刊大盘点(上)
  12. 拉结尔6月21日服务器维护,《拉结尔》3月5日更新公告-S6赛季降临
  13. Python爬虫下载QQ音乐网站歌曲
  14. html字体名称有哪些,css有哪些字体系列?
  15. java 语音包_有人开发了马保国语音包
  16. 图像传感器的市场状况和主要厂商
  17. Delphi控件-复合控件
  18. 常用URL分享,实用地址
  19. 抓包工具fiddler
  20. 决定未来的八大核心科技

热门文章

  1. 浅述 | 数据可视化在电力行业的应用前景
  2. Java知识体系最强总结(2020版) (转载)
  3. 异步电机开环变频变压调速
  4. 如何测试病毒软件而且不中毒,不用外部工具 教你如何快速检查电脑是否被感染和中毒...
  5. 4 设计计算器clac-Java
  6. 最优质的奶是本科生的奶
  7. 电子江湖里,女攻城狮到底是一种怎样的存在?
  8. 基于Android校园失物招领系统
  9. bzoj 2424: [HAOI2010]订货
  10. 五子棋算杀c语言,五子棋AI算法-算杀(示例代码)