写了个 write2sd, 提示 write(): No space left on device

Woodz 2013-08-22 10:07:18
这个程序是用来将 uboot 写到 sd 卡里的.

#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);
}


...全文
175 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiyu1988 2013-08-22
  • 打赏
  • 举报
回复
lseek64(dest_dev_fd, -(1 + 8 + 16 + 256) * 1024, SEEK_END); 这句返回偏移量成功了吗? 还是src_file的大小比(1 + 8 + 16 + 256) * 1024大?

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧