系统IO调用速度比文件IO慢
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
int main(int argc,char * argv[])
{
DIR * dir;
struct dirent * ptr;
int i=0;
struct stat sb;
if (argc!=2)
{
printf("usage: %s <dir>\n",argv[0]);
return -1;
}
if ((dir=opendir(argv[1]))==NULL)
{
printf("fail to open directory %s\n",argv[1]);
return -1;
}
while((ptr=readdir(dir))!=NULL)
{
char filename_src[100];
char filename_dst[100];
sprintf(filename_src,"%s%s%s",getenv("HOME"),"/linux/",ptr->d_name);
sprintf(filename_dst,"%s%s","/tmp/hwq/",ptr->d_name);
printf("filename_src:%s\n",filename_src);
printf("filename_dst:%s\n",filename_dst);
if (stat(filename_src,&sb)==-1)
{
perror("stat");
exit(EXIT_FAILURE);
}
printf("file type: ");
switch(sb.st_mode & S_IFMT)
{
case S_IFBLK:
printf("block file\n");
break;
case S_IFCHR:
printf("character device\n");
break;
case S_IFDIR:
printf("directory file\n");
break;
case S_IFIFO:
printf("fifo file\n");
break;
case S_IFLNK:
printf("symbollink file\n");
break;
case S_IFREG:
printf("regular file\n");
int fd_src=open(filename_src,O_RDONLY);
int fd_dst=open(filename_dst,O_RDWR|O_CREAT|O_TRUNC,0664);
if(fd_src == -1)
{
printf("open src file failed\n");
}
if(fd_dst==-1)
{
printf("open dst file failed\n");
}
char buf[10];
//int read_result=read(fd_src,buf,10);
int read_result=0;
while((read_result=read(fd_src,buf,10))>0)
{
write(fd_dst,buf,read_result);
}
printf("copy done!\n");
close(fd_src);
close(fd_dst);
break;
case S_IFSOCK:
printf("socket\n");
break;
default:
printf("unknown?\n");
break;
}
//printf("%-16s\t",ptr->d_name);
//if(++i%4==0)
//{
// printf("\n");
//}
}
printf("\n");
closedir(dir);
return 0;
}