作业:使用readdir来将目录中的链接文件显示出来,并写入到一个文件内部,再将文件中的内容显示到屏幕上
#include <sys/types.h>
#include <dirent.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
//读取文件的内容,输出到屏幕上
void do_file(int fd)
{
char buf[100] = {0};
int n = 0;
while(1)
{
memset(buf,0,sizeof(buf));
//读取文件的内容,并返回
n = read(fd,buf,sizeof(buf));
//当n=0时,读取到文件尾部
if(n == 0)
{
break;
}
write(STDOUT_FILENO,buf,sizeof(buf));
}
return;
}
void readdir_file(DIR *dp,int fd)
{
struct dirent *dt;
while(1)
{
dt = readdir(dp);
if(NULL == dt)
break;
if(dt -> d_name[0] == '.')
continue;
if(dt -> d_type == DT_DIR || dt -> d_type == DT_REG)
{
if(write(fd,dt->d_name,strlen(dt->d_name))<0)
{
perror("write");
}
printf("reg file:%s\n",dt -> d_name);
}
}
}
int main(int argc, const char *argv[])
{
int fd;
DIR *dp;
if(argc != 3)
{
fprintf(stderr,"usage:%s readdir.txt\n",argv[0]);
return -1;
}
//打开文件
fd = open(argv[1],O_RDWR);
if(fd<0)
{
perror("Fail to open");
return -1;
}
dp = opendir(argv[2]);
if(NULL == dp)
{
perror("Fail to opendir");
return -1;
}
readdir_file(dp,fd);
//操作文件
do_file(fd);
close(fd);
closedir(dp);
return 0;
}