嵌入式Linux文件IO,read()/write()/lseek(),通过文件IO拷贝文件

2019-07-12 15:14发布

文章目录

1,read()函数

#include
ssize_t read(int fd, void *buf, size_t count);|
  1. 成功时返回实际读取的字节数; 出错时返回EOF
  2. 读到文件末尾时返回0
  3. buf是接收数据的缓冲区
  4. 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);
  1. 成功时返回实际写入的字节数; 出错时返回EOF
  2. buf是发送数据的缓冲区
  3. 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);
  1. 成功时返回当前的文件读写位置; 出错时返回EOF
  2. 参数offset(偏移量)和参数whence(基准点)同fseek完全一样

4,通过文件IO,read()/write()拷贝文件

#include //fprintf(),perror() #include //open() #include //errno #include //strerror() #include //read(),write(),close() 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; }