PDA

View Full Version : hàm copy file cho các bạn test thử



hardwire
15-02-2012, 02:27 PM
xin lỗi các bạn vì mình post code lên đây vì repository của mình bị hư rùi


/*
* written by phamthechung0@gmail.com
* Copyright 12/11/2011
*/
#include <stdio.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <unistd.h>
#include <dirent.h>
/*
copy file
path/to/src to /path/to/dst
*/
int copy(const char *src,const char *dst){
#define CP_SIZE 4096
char buf[CP_SIZE];
struct stat fod,fod2;
char exist=1;
if(stat(src,&fod)) return -1;
if(stat(src,&fod2)) exist=0;
int frag=0,od=0;
frag=fod.st_size/CP_SIZE;
od=fod.st_size%CP_SIZE;
int fdsrc=open(src,O_RDONLY,0);
int fddst=0;
if(exist) fddst=open(dst,O_RDWR,0);
else fddst=open(dst,O_RDWR|O_CREAT,0750);
while(frag){
int slice=1;
read(fdsrc,buf,CP_SIZE);
write(fddst,buf,CP_SIZE);
lseek(fdsrc,CP_SIZE*slice,0);
lseek(fddst,CP_SIZE*slice,0);
slice++,frag--;
}
if(od){
read(fdsrc,buf,od);
write(fddst,buf,od);
}
close(fdsrc);close(fddst);
return 0;
#undef CP_SIZE
}
/*

*/
int copydir(const char *src,const char *dst){
int fd1=open(src,O_RDONLY,0);
struct stat fod1,fod2;
if(stat(src,&fod1)) return -1;
if(stat(dst,&fod2)) {mkdir(dst);}
int fd=open(src,O_RDONLY,0);
DIR *dirp=opendir(src);
struct dirent *dirent;
while((dirent=readdir(dirp))!=NULL)
{

}
}

boss14420
15-02-2012, 07:44 PM
Tại sao lại phải lseek(fdsrc,CP_SIZE*slice,0), hình như là mỗi lần read, write là nó tự chuyển đến vị trí đó rồi mà.

hardwire
15-02-2012, 08:02 PM
đó là do system call trong libc đã tự lseek nhưng với mingw trên Window thì không

dungcoi
18-02-2012, 11:44 AM
đó là do system call trong libc đã tự lseek nhưng với mingw trên Window thì không
sao ko dùng hàm C/C++ thuần để code tiện chạy nhiều os luôn cho tiện mà dùng mấy hàm đặc thù trên linux làm gì, nếu nó không có tác dụng rõ ràng (:P)

hardwire
11-03-2012, 01:36 PM
mặc định mình phải lseek , chỉ có thế thôi

quangnh89
23-03-2012, 09:17 AM
mình nghĩ nên dùng mấy hàm như fread, fwrite , fseek, build trên nền nào cũng ok hết

hardwire
25-03-2012, 04:57 PM
ừ đúng rồi thì bạn thử tự viết xem