使用
readdir
来将目录中的链接文件显示出来,并写入到一个文件内部,再将文件中的内容显示到屏幕上
#include <dirent.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
/**
* 使用readdir来将目录中的链接文件显示出来,
* 并写入到一个文件内部,再将文件中的内容显示到屏幕上
*/
void
show_lnks(DIR* dp, int fd)
{
struct dirent* dtp;
char buf[20];
while (1) {
dtp = readdir(dp);
if (dtp == NULL)
break;
if (dtp->d_type == DT_LNK) {
if (write(fd, dtp->d_name, strlen(dtp->d_name)) < 0) {
perror("write");
exit(-1);
}
printf("%s\n", dtp->d_name);
}
}
}
void
print_file(int fd)
{
char buf[20];
int size = 0;
while (1) {
memset(buf, 0, sizeof(buf));
size = read(fd, buf, sizeof(buf));
if (size < 0) {
perror("read");
exit(-1);
}
if (size == 0)
break;
write(STDOUT_FILENO, buf, strlen(buf));
}
}
int
main(int argc, char const* argv[])
{
int fd;
DIR* dp;
if (argc != 2) {
printf("Usage: %s dirname\n", argv[0]);
return -1;
}
dp = opendir(argv[1]);
if (dp == NULL) {
perror("opendir");
return -1;
}
fd = open("log.txt", O_RDWR | O_CREAT | O_TRUNC, 0666);
if (fd < 0) {
perror("open");
return -1;
}
show_lnks(dp, fd);
lseek(fd, 0, SEEK_SET);
print_file(fd);
close(fd);
closedir(dp);
return 0;
}