#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<dirent.h>
#include<string.h>
#include<unistd.h>
int main(int argc, const char *argv[])
{
DIR * dir = opendir(argv[1]);
int file_desc = open(argv[2],O_WRONLY |O_CREAT |O_TRUNC,0666);
if(file_desc < 0)
{
perror("open");
return -1;
}
if(dir == NULL)
{
perror("opendir");
return -1;
}
struct dirent *readptr = NULL;
char name[256] = {0};
while(1)
{
readptr = readdir(dir);
if(readptr == 0)
break;
if(readptr->d_type == DT_LNK)
{
//写入
write(file_desc,readptr->d_name,strlen(readptr->d_name));
write(file_desc,"\n",1);
}
}
close(file_desc);
file_desc = open(argv[2],O_RDONLY);
char buf[64] = {0};
int size = 0;
while(1)
{
memset(buf,0,sizeof(buf));
size = read(file_desc,buf,sizeof(buf));
if(size == 0)
break;
printf("%s",buf);
}
closedir(dir);
close(file_desc);
return 0;
}
输出结果:

该C程序打开一个指定的目录,遍历其中的链接文件(类型为DT_LNK),并将这些链接文件的名字写入到另一个指定的文件中。之后,程序再打开同一个文件进行读取,并打印出写入的内容。
478

被折叠的 条评论
为什么被折叠?



