读取 time.txt 文件,写入到time_2.txt
一、函数
1.1、open() 函数
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
第二个open是第一个open和creat的结合版:
函数功能:打开文件
函数参数1:被打开文件的路径
函数参数2:以什么样的形式打开文件必须包含如下的其中一个O_RDONLY : 以只读的形式打开该文件O_WRONLY : 以只写的形式打开该文件O_RDWR : 以读写的形式打开该文件
------------------------------------------------------------------------------------------------------------
如果需要别的权限,要使用 | 形式拼装 a O_WRONLY | O_CREAT | O_APPENDO_EXCL:如果文件已经存在,则打开操作失败。通常与 O_CREAT 一起使用,用于确保创建新文件而不覆盖已存在的文件。O_CREAT:如果文件不存在,则创建文件。如果文件已存在,它不会被截断,而只是打开。O_TRUNC:如果文件已经存在,将文件长度清为0。这将删除文件的现有内容。O_APPEND:将文件指针设置到文件末尾,以便所有写入操作都追加到文件末尾,而不是覆盖现有内容。O_NONBLOCK:以非阻塞模式打开文件。在非阻塞模式下,读取和写入操作将不会被阻塞,即使没有可用的数据或空间。O_NDELAY同O_NONBLOCKO_SYNC:要求所有I/O操作是同步的,即写入操作完成后,才返回。这可以确保数据写入到磁盘而不是缓存在内存中。O_DIRECTORY:要求打开的是一个目录而不是文件。用于确保只能打开目录。O_NOFOLLOW:如果 pathname 是一个符号链接,则打开操作失败。用于防止解引用符号链接。O_DIRECT:要求绕过内核缓存,直接在应用程序和存储设备之间进行数据传输。通常用于低级I/O操作和性能优化。O_TMPFILE:创建一个临时文件,该文件在关闭后会自动删除。适用于需要临时文件的场景。O_NOCTTY如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机
函数参数3:创建文件的权限 权限用二进制表示
函数返回值:成功返回文件描述符,失败返回-1(有可能会设置errno)
1.2、close() 函数
#include <unistd.h>
int close(int fd);
参数:fd:文件描述符,需要关闭的文件。
返回值:返回 0 表示成功关闭文件,返回 -1 表示失败,并设置 errno 来指示错误原因。常见用法:用于关闭一个已经打开的文件。
1.3、read() 函数
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
参数:fd:文件描述符。buf:用于存放读取数据的缓冲区。count:要读取的字节数。
返回值:返回实际读取的字节数,如果到达文件末尾返回 0,出错返回 -1,并设置 errno 来指示错误原因。常见用法:用于从文件中读取数据。
1.4、write() 函数
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);参数:fd:文件描述符。
buf:要写入的数据。
count:要写入的字节数。
返回值:返回实际写入的字节数,出错返回 -1,并设置 errno 来指示错误原因。常见用法:用于向文件中写入数据。
二、源码
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>/*** 主函数:实现从源文件到目标文件的内容复制* @param argc 命令行参数的数量* @param argv 命令行参数的字符串数组* @return 程序退出状态*/
int main(int argc, const char *argv[])
{int fr = 0, fw = 0, ret = 0;char buf[100] = {0};/* 检查命令行参数数量是否足够 */if(argc < 3){printf("usage: %s <src> <dst>\n", argv[0]);return -1;}/* 打开源文件,只读模式 */fr = open(argv[1], O_RDONLY);/* 打开目标文件,写入模式,如果不存在则创建,存在则清空内容 */fw = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);/* 检查源文件打开是否成功 */if(-1 == fr){perror("open fr");return -1;}/* 检查目标文件打开是否成功 */if( -1 == fw){perror("open fw");return -1;}/* 循环读取源文件内容,并写入目标文件,直到读取结束 */while(1){memset(buf, 0 ,sizeof(buf));ret = read(fr, buf, sizeof(buf));/* 检查读取操作是否成功 */if(-1 == ret){perror("read");return -1;}else if(0 == ret){/* 读取结束,退出循环 */printf("read end\n");break;}/* 写入目标文件 */write(fw, buf, 100);}/* 关闭源文件 */close(fr);/* 关闭目标文件 */close(fw);return 0;
}
三、结果展示
四、源码下载
链接:https://pan.baidu.com/s/1zGmHaum63E3pXIzLgOdUIg
提取码:njqp