嵌入式Linux檔案IO,read()/write()/lseek(),通過檔案IO拷貝檔案
阿新 • • 發佈:2019-01-31
1,read()函式
#include <unistd.h>
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>\n”, 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 <unistd.h>
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\n”) == 0)
break;
write(fd, buf, strlen(buf));
}
3,lseek()函式
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
- 成功時返回當前的檔案讀寫位置; 出錯時返回EOF
- 引數offset(偏移量)和引數whence(基準點)同fseek完全一樣
4,通過檔案IO,read()/write()拷貝檔案
#include <stdio.h>//fprintf(),perror()
#include <fcntl.h>//open()
#include <errno.h>//errno
#include <string.h>//strerror()
#include <unistd.h>//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 <src_file> <dst_feile>\n",argv[0]);
return -1;
}
if(my_cp_file(argv[1],argv[2]) > -1)
{
printf("copy completed!\n");
}
else
{
fprintf(stdout,"copy defected!\n");
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\n",src_file,strerror(errno));
return -1;
}
if((fdt = open(dst_file,O_WRONLY|O_CREAT|O_TRUNC,0666)) < 0)
{
printf("open %s : %s\n:",dst_file,strerror(errno));
return -1;
}
while((n = read(fds,buf,N)) >0)
{
write(fdt,buf,n);
}
close(fds);
close(fdt);
return 0;
}