23,124
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define BUFSIZE (256 * 1024)
int main(int argc, char **argv)
{
int dest_dev_fd; // 目标设备
int src_file_fd; // 源文件
char buf[BUFSIZE];
ssize_t read_ret;
ssize_t write_ret;
if(argc < 3)
{
printf("Usage: ./write2sd </dev/dev_name> <src_file>\n");
exit(1);
}
src_file_fd = open(argv[2], O_RDONLY);
if(src_file_fd == -1)
{
perror("open()");
exit(1);
}
dest_dev_fd = open(argv[1], O_WRONLY);
if(dest_dev_fd == -1)
{
perror("open()");
exit(1);
}
// 将文件位置指针从文件尾向回定位
lseek64(dest_dev_fd, -(1 + 8 + 16 + 256) * 1024, SEEK_END);
read_ret = read(src_file_fd, buf, (size_t)(8 * 1024));
if(read_ret == -1)
{
perror("read()");
exit(1);
}
write_ret = write(dest_dev_fd, buf, (size_t)read_ret);
if(write_ret == -1)
{
perror("write()");
exit(1);
}
lseek64(src_file_fd, 0, SEEK_SET);
read_ret = read(src_file_fd, buf, (size_t)(256 * 1024));
if(read_ret == -1)
{
perror("read()");
exit(1);
}
write_ret = write(dest_dev_fd, buf, (size_t)read_ret);
if(write_ret == -1)
{
perror("write()");
exit(1);
}
close(src_file_fd);
close(dest_dev_fd);
exit(0);
}