Я пытаюсь выполнить это упражнение для своего класса «Операционные системы»: я должен пропустить определенный каталог через командную строку, чтобы найти в нем любые файлы, на которые указывают программные ссылки.
Это то, что ясделано:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dir_ptr;
struct dirent *dir_str;
struct stat buf;
struct stat buf2;
if(argc!=2)
{
printf("Error! I need a directory.\n");
exit(-1);
}
if((dir_ptr=opendir(argv[1]))==NULL)
{
printf("Opendir error: %s\n", strerror(errno));
exit(-1);
}
while((dir_str=readdir(dir_ptr))!=NULL)
{
lstat(dir_str->d_name, &buf);
if(S_ISLNK(buf.st_mode))
{
stat(dir_str->d_name, &buf2);
printf("'%s' points to a file of %ld bytes.\n", dir_str->d_name, buf2.st_size);
}
}
closedir(dir_ptr);
exit(0);
}
Теперь вот моя проблема: эта программа просто записывает в стандартный вывод все программные ссылки, которые указывают на файл определенного размера.Вместо этого мне нужно, чтобы он распечатывал все файлы, на которые указывает мягкая ссылка.Во-вторых, странно, что эта программа работает, только если каталог не требуется, я имею в виду получение текущего каталога с getcwd()
и передачу возвращенного пути к opendir()
.Этот факт даже не печатает все программные ссылки в переданном каталоге.
Заранее спасибо!Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Давайте предположим, что у нас есть этот каталог с именем "my_directory" с этими файлами:
justatext.txt
softlink1 (it points to justatext.txt)
justanothertext.txt
softlink2(it points to justanothertext)
Когда я передаю "my_directory" через командную строку (./a.out my_directory), я хочу, чтобы программа записывала в стандартный вывод "justatext.txt" и "justanothertext.txt", поскольку эти файлы в каталоге указываются программными ссылками.Если я передам этот каталог моей программе, выходные данные не будут напечатаны.