作业1
题目
使用 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>
void write_islink(DIR *dir_fp, int dest_fd)
{
struct dirent *dir_st;
char name[32];
long ch = '\t';
while (1) {
dir_st = readdir(dir_fp); // 读取文件
// 退出条件
if (dir_st == NULL)
break;
if (dir_st->d_type == DT_LNK) {
strcpy(name, dir_st->d_name);
// 输出到屏幕
write(STDOUT_FILENO, name, strlen(name));
write(STDOUT_FILENO, &ch, sizeof(char));
// 写入另一个文件
write(dest_fd, name, strlen(name));
write(dest_fd, &ch, sizeof(char));
}
}
}
void cat(int dest_fd)
{
lseek(dest_fd, 0, SEEK_SET);
char *buf = (char *)malloc((sizeof(char *)));
int n = 0;
while (1) {
n = read(dest_fd, buf, sizeof(buf));
if (n == 0) {
break;
}
write(STDOUT_FILENO, buf, sizeof(buf));
}
}
int main(int argc, char const *argv[])
{
// 打开目录文件
DIR *dir_fp = opendir(argv[1]);
// 打开目标文件
int dest_fd = open(argv[2], O_RDWR | O_CREAT | O_TRUNC, 0666);
// 显示该目录的链接文件,并写入另一个文件内部
printf("%s目录的链接文件: \n", argv[1]);
write_islink(dir_fp, dest_fd);
putchar('\n');
// 输出dest_fd内容到屏幕
printf("输出%s的内容到屏幕: \n", argv[2]);
cat(dest_fd);
putchar('\n');
// 关闭文件
closedir(dir_fp);
close(dest_fd);
return 0;
}