Linux C read、write、creat、open等函数应用实例

来源:互联网 发布:淘宝首页装修全屏 编辑:程序博客网 时间:2024/06/05 17:15

      本文内容主要讲解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.c Author      : 王玉春 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.c Author      : 王玉春 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;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁七个月还不会说话怎么办 2岁3个月宝宝说话结巴怎么办 两周的宝宝突然说话结巴怎么办 宝宝3岁半了说话口吃怎么办? 四十天的宝宝吐奶严重怎么办 宝宝吐奶从鼻子喷出来怎么办 六个多月宝宝吐奶一股酸味怎么办 50天的宝宝吃了就吐怎么办 微信语音群聊超过9人怎么办 四个月宝宝母乳不够不喝奶粉怎么办 四个月的宝宝母乳不够吃怎么办 火山直播十多天了还都是假人怎么办 吉利汽车锁了后屁股灯还亮怎么办 六个月凶了他突然不说话了怎么办 微信聊天聊的时间长了没话题怎么办 群聊同学加我微信不想加怎么办? 翡翠销售遇到不说话的客人怎么办 4个月宝宝吃手上瘾怎么办 宝宝吃手上瘾拒绝吃奶粉吃奶怎么办 2岁宝宝特别粘人爱哭怎么办 3岁半宝宝突然说话口吃怎么办 2岁3个月宝宝突然说话结巴怎么办 一位特爱说话爱玩的高中生怎么办 猫5天不吃不喝躲起来该怎么办 两个月的小家猫睡觉要黏人睡怎么办 成年的儿子不听话做父母要怎么办 听到孩子上课又不听话想揍他怎么办 18个月小孩脾气很犟怎么办 烦自己的孩子想弄死他怎么办 楼道经常有小孩在门口恶作剧怎么办 2岁宝宝咳嗽咳吐了怎么办 不小心把鱼刺吃下去该怎么办 儿子在学校被老师甩耳光我该怎么办 家长诬陷老师打她家孩子耳光怎么办 一岁宝宝总觉得有痰怎么办 一岁宝宝感冒咳嗽有痰怎么办 哭的时候踹不过气来应该怎么办 孩子在幼儿园被老师罚站怎么办 孩子屁股打肿了又红又紫怎么办 生完孩子两个月一直浑身疼怎么办 宝宝被蚊子叮咬后红肿硬怎么办