首页 > 编程知识 正文

函数模型的应用实例,linux应用开发实例

时间:2023-05-04 11:19:28 阅读:219288 作者:2751

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

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

头文件:io_basic.h

/* * io_basic.h * * Created on: 2015年7月20日 * Author: 失眠的萝莉 */#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;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。