拷贝文件
#include<myhead.h>
#define MAXSIZE 1024
int main(int argc, const char *argv[])
{
//定义文件和缓存数组
int fdin,fdout;
char buff[MAXSIZE]={0};
ssize_t read_size=0;//承接read了几个字节
//打开两个文件
fdin=open(argv[1],O_RDONLY);
if(fdin==-1)
{
ERR_MSG("file_in open error");
}
fdout=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664);
if(fdout==-1)
{
close(fdout);
ERR_MSG("file_out open error");
}
//循环读取,判断写入的个数是否等于读取的个数
while((read_size=read(fdin,buff,MAXSIZE))>0)
{
if((write(fdout,buff,read_size))!=read_size)
{
printf("copy error! ");
close(fdin);
close(fdout);
return -1;
}
}
//检查读取是否错误
if(read_size==-1)
{
ERR_MSG("read last error");
close(fdin);
close(fdout);
}
//关闭
if(close(fdin)==-1)
ERR_MSG("close file_in error");
if(close(fdout)==-1)
ERR_MSG("close file_out error");
printf("拷贝成功");
}
return 0;
}
拷贝照片
#include<myhead.h>
#define MAX 4096
int main(int argc, const char *argv[])
{
FILE *src;
FILE *dest;
size_t read_size=0;
unsigned char buff[MAX]={0};
src=fopen(argv[1],"rb");
dest=fopen(argv[2],"wb");
if(src==NULL)
{
ERR_MSG("src open error");
}
if(dest==NULL)
{
ERR_MSG("dest open error");
fclose(dest);
}
while((read_size=fread(buff,1,MAX,src))>0)
{
if(fwrite(buff,1,read_size,dest)!=read_size)
ERR_MSG("write error!");
}
if(ferror(src))
ERR_MSG("read error!");
if(fclose(src)!=0)
ERR_MSG("src close error");
if(fclose(dest)!=0)
ERR_MSG("dest close error");
printf("photo copy success");
return 0;
}
计算文件大小
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
// 错误处理宏
#define ERR_MSG(msg) do { \
perror(msg); \
exit(EXIT_FAILURE); \
} while(0)
// 方法2:通过移动文件指针获取文件大小
off_t get_file_size_by_lseek(const char *filename)
{
int fd = open(filename, O_RDONLY);
if (fd == -1)
{
ERR_MSG("open failed");
}
// 将文件指针移到末尾,返回当前位置(即文件大小)
off_t size = lseek(fd, 0, SEEK_END);
if (size == -1) {
close(fd);
ERR_MSG("lseek failed");
}
close(fd);
return size;
}
int main(int argc, char *argv[])
{
off_t size2 = get_file_size_by_lseek(argv[1]);
// 输出结果
printf("文件: %s\n", argv[1]);
printf("通过lseek获取的大小: %ld 字节\n", (long)size2);
return 0;
}