Разработать программу, которая осуществляет просмотр текущего каталога и выводит на экран его содержимое группами в порядке возрастания числа ссылок на файлы (в том числе имена каталогов). Группа представляет собой объединение файлов с одинаковым числом ссылок на них.
Решение:
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// #include <fcntl.h> /* флажки чтения и записи */
#include <sys/types.h> /* определения типов */
#include <sys/stat.h> /* структура, возвращаемая stat */
#include <dirent.h>
struct LE{
int hardlinks;
char name[256];
struct LE *next;
};
main(int argc, char **argv)
{
struct stat stat_buf;
struct dirent *d;
DIR *dir;
struct LE *head, *cur, *i, *j, tmp;
if (argc == 1)
{
printf(“Usage: %s <dir_name>\n”, argv[0]);
exit(-1);
}
if ((dir = opendir(argv[1])) == NULL )
{
printf(“Couldn’t open %s\n”, argv[1]);
exit(-1);
}
head = malloc(sizeof(struct LE));
cur = head;
while ((d = readdir(dir)) != NULL)
{
strcpy(cur->name, d->d_name);
cur->hardlinks = 1;
if (stat(cur->name, &stat_buf) == -1)
{
printf(“Couldn’t stat %s\n”, cur->name);
exit(-1);
}
cur->hardlinks = stat_buf.st_nlink;
cur->next = malloc(sizeof(struct LE));
cur = cur->next;
}
cur->next = NULL;
//let’s sort ’em all!
for (i = head; i->next != NULL; i = i->next)
for (j = head; j->next != NULL; j = j->next)
if (i->hardlinks < j->hardlinks)
{
tmp.hardlinks = j->hardlinks;
strcpy(tmp.name, j->name);
j->hardlinks = i->hardlinks;
strcpy(j->name, i->name);
i->hardlinks = tmp.hardlinks;
strcpy(i->name, tmp.name);
}
for (cur = head; cur->next != NULL; cur = cur->next)
printf(“%s : %d\n”, cur->name, cur->hardlinks);
closedir(dir);
for (cur = head; cur != NULL; cur = cur->next)
free(cur);
return 0;
}
END OF FILE
Задача 1
Разработать программу, которая просматривает текущий каталог и выводит на экран имена всех встретившихся в нем обычных файлов. Затем осуществляется переход в родительский каталог, который затем становится текущим, и указанные выше действия повторяются до тех пор, пока текущим каталогом не станет корневой каталог
Решение
*/
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc > 1)
printf(“Usage: %s – Additional argument(s) will be ignored\n”, argv[0]);
DIR *d;
struct dirent *entry;
struct stat file;
char current[PATH_MAX];
while (1) {
printf(“Working directory: %s\n”, get_current_dir_name());
d = opendir(“.”);
while ((entry = readdir(d)) != NULL )
{
stat(entry->d_name, &file);
if ((file.st_mode & S_IFMT) == S_IFREG)
printf(“\t%s\n”, entry->d_name);
}
closedir(d);
chdir(“..”);
if ( ! strcmp(get_current_dir_name(),”/”))
break;
}
return 0;
}END OF FILE
Доступа нет, контент закрытДоступ закрыт
Полный текст и возможность скачивания доступны только для пользователей с Премиум подпиской.
Если вы уже имеете Премиум подписку, то авторизируйтесь для доступа к полному тексту и возможности его скачать.
ВЫБЕРИТЕ ВАШ ТАРИФ
-
- PREMIUM_30
-
599
-
- PREMIUM_60
-
999
-
- PREMIUM_90
-
1599
Доступ закрыт
Полный текст и возможность скачивания доступны только для пользователей с Премиум подпиской.
Если вы уже имеете Премиум подписку, то авторизируйтесь для доступа к полному тексту и возможности его скачать.
ВЫБЕРИТЕ ВАШ ТАРИФ
-
- PREMIUM_30
-
599
-
- PREMIUM_60
-
999
-
- PREMIUM_90
-
1599
Доступ закрыт
Полный текст и возможность скачивания доступны только для пользователей с Премиум подпиской.
Если вы уже имеете Премиум подписку, то авторизируйтесь для доступа к полному тексту и возможности его скачать.
ВЫБЕРИТЕ ВАШ ТАРИФ
-
- PREMIUM_30
-
599
-
- PREMIUM_60
-
999
-
- PREMIUM_90
-
1599