嵌入式Linux文件IO,read()/write()/lseek(),通过文件IO拷贝文件
2019-07-12 15:14发布
生成海报
文章目录
1,read()函数
#include
ssize_t read(int fd, void *buf, size_t count);|
- 成功时返回实际读取的字节数; 出错时返回EOF
- 读到文件末尾时返回0
- buf是接收数据的缓冲区
- count不应超过buf大小
read()示例
从指定的文件(文本文件)中读取内容并统计大小
int main(int argc, char *argv[]) {
{
int fd, n, total = 0;
char buf[64];
if (argc < 2) {
printf(“Usage : %s <file>
”, argv[0]); return -1;
}
if((fd = open(argv[1], O_RDONLY)) < 0) {
perror(“open”);
return -1;
}
while ((n = read(fd, buf, 64)) > 0) {
total += n;
}
2,write()函数
#include
ssize_t write(int fd, void *buf, size_t count);
- 成功时返回实际写入的字节数; 出错时返回EOF
- buf是发送数据的缓冲区
- count不应超过buf大小
write()示例
将键盘输入的内容写入文件, 直到输入quit
int fd;
char buf[20];
if ((fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) {
perror(“open”);
return -1;
}
while (fgets(buf, 20, stdin) != NULL) {
if (strcmp(buf, “quit
”) == 0)
break;
write(fd, buf, strlen(buf));
}
3,lseek()函数
#include
off_t lseek(int fd, off_t offset, int whence);
- 成功时返回当前的文件读写位置; 出错时返回EOF
- 参数offset(偏移量)和参数whence(基准点)同fseek完全一样
4,通过文件IO,read()/write()拷贝文件
#include
#include
#include
#include
#include
int my_cp_file(const char *src_file,const char *dst_file);
int main(int argc, const char *argv[])
{
if(argc < 3)
{
printf("123456");
fprintf(stdout,"usage:%s
",argv[0]);
return -1;
}
if(my_cp_file(argv[1],argv[2]) > -1)
{
printf("copy completed!
");
}
else
{
fprintf(stdout,"copy defected!
");
return -1;
}
return 0;
}
int my_cp_file(const char *src_file,const char *dst_file)
{
const int N = 64;
int fds,fdt,n;
char buf[N];
if((fds = open(src_file,O_RDONLY)) < 0)
{
fprintf(stdout,"open %s : %s
",src_file,strerror(errno));
return -1;
}
if((fdt = open(dst_file,O_WRONLY|O_CREAT|O_TRUNC,0666)) < 0)
{
printf("open %s : %s
:",dst_file,strerror(errno));
return -1;
}
while((n = read(fds,buf,N)) >0)
{
write(fdt,buf,n);
}
close(fds);
close(fdt);
return 0;
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮