拷贝上课的视频,到当前路径new.mp4
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#define N 1024*1024 //1Mb
//拷贝大文件,argv[1]->源文件;argv[2]->目标文件
int main(int argc,char **argv)
{
int fd1,fd2;
char buf[N];
int ret;
fd1=open(argv[1],O_RDWR);//打开源文件
if(fd1==-1)
{
perror("open fd1 fail\n");
return -1;
}
fd2=open(argv[2],O_RDWR|O_CREAT|O_TRUNC);//创建目标文件(会覆盖同名文件)
if(fd2==-1)
{
prrror("open fd2 fail");
return -1;
}
while(1)
{
bzero(buf,sizeof(buf));//清空buf
ret=read(fd1,buf,N);//读取ret个字节(ret<=N)
if(ret==0)
break;
write(fd2,buf,ret);//把读取的内容写进new.mp4
}
close(fd1);
close(fd2);
return 0;
}
?
?
文件的打开/新建?? ??? ?man 2 open ?? ?注:linux中所有的函数,只要参数需要用到多个宏定义,都是使用按位或连接起来 ?? ?#include <sys/types.h> ?? ?#include <sys/stat.h> ?? ?#include <fcntl.h> ?? ?int open(const char *pathname, int flags); ?? ?返回值: ?? ??? ?成功 --》返回文件描述符 ?? ??? ?失败 --》返回-1 ?? ?参数: ?? ??? ?pathname --》你要打开的那个文件的路径名 ?? ??? ?flags --》O_RDONLY ? 只读 ?? ??? ?O_WRONLY ? 只写 ?? ??? ?O_RDWR ? ? 可读写 ?? ?情况一: 你想使用的权限跟文件本身的权限不一致,会打开失败 ?? ?情况二:你想用O_RDONLY只读的方式打开文件,此时调用write写入文件是不成功的 ?? ??? ?O_APPEND?? ?以追加的方式打开文件 ?? ??? ?O_CREAT?? ??? ?新建文件 ?? ??? ?O_EXCL?? ??? ?跟O_CREAT配合使用,表示如果文件存在就失败退出,不新建,不存在就新建 ?? ??? ?O_TRUNC?? ??? ?跟O_CREAT配合使用,表示如果文件存在就清空覆盖掉原来的文件 ?? ?int open(const char *pathname, int flags, mode_t mode); ?? ?参数:mode --》你创建一个文件的时候,顺便给这个设置一个权限。例:0777 ?? ?注:设置权限需要考虑umask掩码值.例如:umask 0002 会使得其他用户不可写
文件的读取?? ??? ?man 2 read ?? ?注: ?ssize_t和size_t都是用typedef给长整型取的别名 ? ?? ?#include <unistd.h> ?? ?ssize_t read(int fd, void *buf, size_t count); ?? ?返回值(重点):成功 --》返回成功读取到的字节数 ?? ?如果一个文件读取完毕,再次调用read读取,read返回0个字节 ?? ?失败 --》-1 ?? ?参数: ?? ??? ?fd --》你要读取的那个文件的文件描述符 ?? ??? ?buf --》存放你读取到的内容 ?? ??? ?count --》你打算读取多少字节的数据 ?? ??? ? 文件的写入?? ??? ?man 2 write ?? ?ssize_t write(int fd, const void *buf, size_t count); ?? ?返回值:count写多少,返回值就是多少 ?? ?参数: ?? ??? ?fd --》你要写入的那个文件的文件描述符 ?? ??? ?buf --》存放你要写入的内容 ?? ??? ?count --》你打算写入多少字节的数据? ?? ??? ?write(fd,"hello",5) //返回值是5 ?? ??? ?write(fd,"hello",10) //返回值是10(写入hello+5个垃圾字符) ?? ??? ?write(fd,"hello",100) //返回值是100 ?? ?注:count的值请你不要乱瞎写(会把垃圾数写进去) ?? ? 文件的关闭 ?? ?int close(int fd); ?? ?返回值:成功 0 失败 ?-1 ?? ?参数:fd --》你要关闭的文件描述符?
?
|