文件IO操作

xiaoxiao2021-02-28  138

在对一个文件或者设备进行读写之前,都需要先打开,以获得该文件或者设备的操作指针,也就是文件描述符。有了文件描述符,后续就可以进行读取,修改操作了。

头文件<fcntl.h>函数声明int open(const char *pathname, int flags, mode_t mode);返回值成功:返回文件描述符;失败:-1头文件<unistd.h>函数声明int close(int fd);返回值成功:0;失败:-1头文件<unistd.h>函数声明size_t read(int fd, void *buf, size_t count);返回值成功:返回读取的字符数,0表示读取到文件结束位置;失败:-1头文件<unistd.h>函数声明size_t read(int fd, void *buf, size_t count);返回值成功:返回读取的字符数,0表示读取到文件结束位置;失败:-1头文件<unistd.h>函数声明size_t write(int fd, void *buf, size_t count);返回值成功:返回写入的字符数;失败:-1 #include <iostream> #include <string> #include <fcntl.h> #include <unistd.h> #include <stdio.h> using namespace std; #define BUF_SIZE 1024 #define MAX_FILE_LEN 256 int main(int argc, const char * argv[]) { char buffer[BUF_SIZE+1] = {0}; if (argc < 2) { printf("usage: %s <file>\n", argv[0]); return 1; } //打开源文件 int in_fd = open(argv[1], O_RDONLY, 0777); if (-1 == in_fd) { printf("open %s failed\n", argv[1]); return 1; } //打开目标文件 char destfile[MAX_FILE_LEN] = {0}; snprintf(destfile, MAX_FILE_LEN, "%s_bak.txt", argv[1]); printf("write to file %s\n", destfile); int out_fd = open(argv[1], O_WRONLY|O_CREAT, 0777); if (-1 == out_fd) { printf("open %s failed\n", destfile); return 1; } //读源文件 size_t rd_num; while((rd_num = read(in_fd, buffer, BUF_SIZE)) > 0) { //写入目标文件 size_t wr_num, to_num; char *p = buffer; to_num = rd_num; while (to_num > 0) { wr_num = write(out_fd, p, to_num); p += wr_num; to_num -= wr_num; } buffer[rd_num] = '\0'; printf("%s", buffer); } //关闭文件 close(in_fd); close(out_fd); return 0; }
转载请注明原文地址: https://www.6miu.com/read-61068.html

最新回复(0)