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数据库操作实例
- 下一篇:没有了
