用到的函数及其特点
open函数
int open(const char *pathname, int flags);
功能:打开文件
参数:
pathname:文件路径名
flags:打开方式
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 可读可写
O_CREAT 创建
O_TRUNC 清除
O_APPEND 追加
返回值:
成功返回文件描述符
失败返回-1 //重点使用项,和fopen不同,文件是-1代表错误
注意事项:当打开方式当中有O_CREAT选项的时候,需要给open函数添加
第三个参数,指定创建文件的权限
int open(const char *pathname, int flags,mode_t mode);
创建出来的文件牵扯到掩码的概念
最后的权限是 指定权限值&(~umask)
read函数
ssize_t read(int fd, void *buf, size_t count);
功能:从一个可读的文件中读取数据
参数:
fd文件描述符
buf存放的位置
cout读取的个数
返回值:
成功:实际读取的个数
失败:返回-1
读到文件末尾:返回0
read函数是要特别注意的,fread函数的返回值是实际读取的个数,其类型为ssize_t类型,在实现cp功能的时候要利用到这个特性
write函数
ssize_t write(int fd, const void *buf, size_t count);
功能:将数据写到一个可写的文件当中去
参数:
fd文件描述符
buf要写入文件的位置
count写入的个数
返回值:
成功返回写入的个数
失败返回-1
代码实现
代码
//使用文件IO实现文件CP功能
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
char arr[10];
int ch;
int ft;
int fp;
if (argc != 3)
{
printf("please use :%s <newname> <cpname>\n", argv[0]);
return -1;
}
ft = open(argv[1], O_RDONLY);
if (ft < 0) //open失败返回-1
{
perror(argv[1]);
return -1;
}
fp = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fp < 0) //open失败返回-1
{
perror(argv[2]);
return -1;
}
while ((ch = read(ft, arr, 10))) //读取到文件末尾,返回0
{
write(fp, arr, ch); //返回读取字符的个数
}
close(fp);
close(ft);
return 0;
}
验证结果
顺利完成功能