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.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(" open_file:文件操作失败"); return -1; } printf(" open_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(" open_file:文件操作失败"); return -1; } printf(" open_file:文件操作成功"); return fd; } int create_file(const char* filename) { int fd; //文件描述符 fd = creat(filename, 0664); //判断文件是否操作成功,-1表示操作失败 if (fd == -1) { printf(" create_file:文件操作失败"); return -1; } printf(" create_file:文件操作成功"); return fd; } void read_file(const char* filename) { int fd = open_file(filename); //打印文件描述符 // printf(" read_file.fd = %d", fd); //缓存数组 char buf[255]; //单次从文件读取到的字符长度 ssize_t rNum = 0; printf(" rNum:%d", rNum); //读取文件中所有内容 while (rNum = read(fd, buf, RD_UNIT_SIZE)) { printf(" ---------------------------------------"); if (rNum == -1) { // if (errno == EINTR){ // continue; // } printf(" read_file文件操作失败"); close(fd); return; } else { if (rNum > 0) { //文件读取成功 } else { //文件读取完毕,到达文件结尾EOF } } } printf(" 文件读取完毕,打印文件内容: "); // 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(" read_file.fd = %d", fd); //单次写入到文件的字符长度 ssize_t wNum = 0; //已经写入文件的总字符长度 ssize_t tNum = 0; char *buf_pointer = buf + tNum; printf(" GET_ARRAY_LEN(buf)=%d", GET_ARRAY_LEN(buf)); //读取文件中所有内容 while ((wNum = write(fd, buf_pointer, WR_UNIT_SIZE)) && tNum < GET_ARRAY_LEN(buf) - 1) { // printf(" ---------------------------------------"); if (wNum == -1) { printf(" write_file文件操作失败"); close(fd); return; } else { if (wNum > 0) { //文件写入成功 tNum += wNum; buf_pointer += wNum; // printf(" tNum=%d, wNum=%d", tNum, wNum ); } else { //文件写入完毕 } } } printf(" 文件写入完毕 "); 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(" read_file.fd = %d", fd); //缓存数组 char buf[RDWR_UNIT_SIZE]; //单次从文件读取到的字符长度 ssize_t rNum = 0; // printf(" rNum:%d", rNum); printf("开始拷贝文件: "); //读取文件中所有内容 while (rNum = read(fd_src, buf, RDWR_UNIT_SIZE)) { printf("."); if (rNum == -1) { // if (errno == EINTR){ // continue; // } printf(" cy_file文件操作失败"); close(fd_src); return; } else { if (rNum > 0) { //文件读取成功,将读取的内容写入目标文件 ssize_t wNum = write(fd_des, buf, RDWR_UNIT_SIZE); if (wNum == -1) { printf(" cp_file文件操作失败"); close(fd_des); return; } else { if (wNum > 0) { //文件写入成功 } else { //文件写入完毕 } } } else { //文件读取完毕,到达文件结尾EOF } } } printf(" 文件拷贝完毕 "); 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; }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: PHP Yii AR数据库操作实例
- 下一篇:没有了