Linux C read、write、creat、open等函数应用实例
本文内容主要讲解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等函数应用实例相关推荐
- linux文件编程(open、write、read、creat、lseek函数)
文件编程内容比较多,如文件系统原理及访问机制文件在内核中的管理机制,什么是文件信息节点iNode.文件共享.文件权限.各种用户对其权限等等.以下主要记录如何用代码操作文件,实现文件的创建.打开.编辑等 ...
- linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf
Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...
- 三种睡眠时间函数的区别:linux 的sleep()、usleep()、nanosleep()函数
三种睡眠时间函数的区别:linux 的sleep().usleep().nanosleep()函数 (1)sleep()-------以秒为单位 unsigned int sleep(unsigned ...
- linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...
原标题:Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动 2.3 函数实现机制 2.3.1 Linux 字符设备驱动 在linux 3.5.4中,用结构体cdev描述字符设备,cde ...
- Linux下C如何调用PCI Lib函数
Linux下C如何调用PCI Lib函数 在Linux下,可以通过"setpci"和"setpci"命令来访问PCI设备的配置空间,那么能否用程序来访问PCI ...
- linux 设备数 of,linux下devicetree中惯用的of函数
linux下devicetree中常用的of函数 从device_node中获取信息: int of_property_read_u8_array(const struct device_node * ...
- linux c中字符替换函数,Linux C 支持正则表达式的字符串替换函数
[root@localhost src]# cat a.c /** * Linux C 支持正则表达式的字符串替换函数 * * Author: cnscn@163.com * Homepage: ww ...
- linux c 删除文件,linux c remove 删除文件或目录函数
linux c remove 删除文件或目录函数 头文件:#include remove()函数用于删除指定的文件,其原型如下: int remove(char * filename); [参数]fi ...
- Linux SPI驱动学习——调用SPI读写函数
Linux SPI驱动学习--调用SPI读写函数 博客说明 开发环境 1. 基于W25Q16型FLASH来看SPI的读写函数 附录 博客说明 撰写日期 2019.10.25 完稿日期 未完稿 最近维护 ...
- linux 创建线程函数吗,[笔记]linux下和windows下的 创建线程函数
linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include #define CreateThreadEx(tid,threadFun,args) ...
最新文章
- mybatis 思维导图,让 mybatis 不再难懂(二)
- Windows下调试PostGreSQL源码第一步 - 下载和编译源码、构造VS工程
- Leetcode1963. 使字符串平衡的最小交换次数[C++题解]:贪心
- 一篇非常有用的文章-《台湾清华彭明辉教授的研究生手册》
- NUC1373 Bank Interest【水题】
- easy and hard things
- github-share报错无法读取远程仓库
- matplotlib 柱状图_Matplotlib数据可视化:柱状图与直方图
- 网上书店动态网页设计
- android源码学习-Handler机制及其六个核心点
- 从期刊层面看科研!计算机顶级期刊大盘点(上)
- 拉结尔6月21日服务器维护,《拉结尔》3月5日更新公告-S6赛季降临
- Python爬虫下载QQ音乐网站歌曲
- html字体名称有哪些,css有哪些字体系列?
- java 语音包_有人开发了马保国语音包
- 图像传感器的市场状况和主要厂商
- Delphi控件-复合控件
- 常用URL分享,实用地址
- 抓包工具fiddler
- 决定未来的八大核心科技
热门文章
- 浅述 | 数据可视化在电力行业的应用前景
- Java知识体系最强总结(2020版) (转载)
- 异步电机开环变频变压调速
- 如何测试病毒软件而且不中毒,不用外部工具 教你如何快速检查电脑是否被感染和中毒...
- 4 设计计算器clac-Java
- 最优质的奶是本科生的奶
- 电子江湖里,女攻城狮到底是一种怎样的存在?
- 基于Android校园失物招领系统
- bzoj 2424: [HAOI2010]订货
- 五子棋算杀c语言,五子棋AI算法-算杀(示例代码)