Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 26

Подсчитать число блоков, занимаемых каталогами, входящими в родительский каталог

05.04.2015, 20:25. Показов 2969. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Есть задача: "Подсчитать число блоков, занимаемых каталогами, входящими в родительский каталог"
Не могу понять как это реализовать. Буду очень признателен за помощь!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.04.2015, 20:25
Ответы с готовыми решениями:

Родительский каталог в Assembler
Ситуация такая есть родительский каталог А, в котором создан подкаталог Б. Надо перенести файл из каталога Б в А. Если бы речь шла о...

Перемещение файла в родительский каталог
Mожно ли переместить файл в родительскую директорию не указывая её конкретного пути? Т.е. чтобы можно было сделать bat'ник и запускать из...

Как получить родительский каталог файла
Доброе время суток, Ситуация такая - есть приложение, в одном из классов которого я прописываю относительный путь к графическому файлу. В...

9
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
05.04.2015, 21:27
Лучший ответ Сообщение было отмечено Lin_13 как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
 
int main()
{
    DIR* dir;
    struct dirent* entry;
    struct stat sb;
    size_t n_blocks = 0;
    
    if(chdir("..") == -1)
    {
        perror("chdir");
        exit(EXIT_FAILURE);
    }
    
    dir = opendir(".");
    if(dir == NULL)
    {
        perror("opendir");
        exit(EXIT_FAILURE);
    }
    
    entry = readdir(dir);
    while(entry != NULL)
    {
        if(strcmp(entry->d_name, ".") == 0 ||
           strcmp(entry->d_name, "..") == 0)
        {
            entry = readdir(dir);
            continue;
        }
        if(stat(entry->d_name, &sb) == -1)
        {
            perror("stat");
            exit(EXIT_FAILURE);
        }
        if(S_ISDIR(sb.st_mode))
            n_blocks += sb.st_blocks;
        entry = readdir(dir);
    }
    printf("Number of 512 blocks allocated: %ld.\n", n_blocks);
    closedir(dir);
    return 0;
}
1
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 26
05.04.2015, 22:13  [ТС]
Почему-то ничего не выводит. Я правильно ввожу?
Bash
1
$cc -o output prog.c
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
05.04.2015, 22:40
этим ты создал исполняемый файл. чтобы видеть, что он делает, его, как и любую программу, нужно запустить
0
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 26
11.04.2015, 09:45  [ТС]
Понял. Можете закомментировать важные моменты? Не все понятно.
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.04.2015, 19:38
что именно не понятно? (только не спрашивайте, что это ... за функция. маны пересказывать не буду)
0
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 26
12.04.2015, 18:35  [ТС]
Цитата Сообщение от retmas Посмотреть сообщение
что именно не понятно? (только не спрашивайте, что это ... за функция. маны пересказывать не буду)
Правильно ли понял:

C
1
if(chdir("..") == -1) // Изменяем каталог на родительский
C
1
2
dir = opendir("."); // Открываем текущий и проверяем есть ли данные
if(dir == NULL)
Вот эти моменты не очень понятны:

C
1
if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
C
1
if(stat(entry->d_name, &sb) == -1)
C
1
if(S_ISDIR(sb.st_mode))
Добавлено через 22 часа 49 минут
Цитата Сообщение от retmas Посмотреть сообщение
entry = readdir(dir);
Еще не понял зачем считывать данные в конце цикла, если сделали это до этого
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
12.04.2015, 19:27
Цитата Сообщение от Lin_13 Посмотреть сообщение
не понял зачем считывать данные в конце цикла, если сделали это до этого
для того, чтобы получить указатель на структуру dirent, описывающую следующий объект файловой системы в папке.
прочитайте описание функции readdir (и еще какие там непонятны). там же все доступно описано. и не будет таких вопросов.
0
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 26
12.04.2015, 20:10  [ТС]
Цитата Сообщение от retmas Посмотреть сообщение
для того, чтобы получить указатель на структуру dirent, описывающую следующий объект файловой системы в папке.
прочитайте описание функции readdir (и еще какие там непонятны). там же все доступно описано. и не будет таких вопросов.
Разобрался. Остался один вопрос. Здесь производится проверка на то, что каталог является родительским, и если да, то переходим к следующему каталогу?
Цитата Сообщение от retmas Посмотреть сообщение
if(strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
{
entry = readdir(dir);
continue;
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
12.04.2015, 20:16
нет. "." и ".." это ссылки на текущий и родительский каталоги. при перечислении содержимого каталога readdir выдаст и их тоже. очевидно они нам не нужны, поэтому мы их игнорируем, перейдя к следующему объекту в директории
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2015, 20:16
Помогаю со студенческими работами здесь

Подсчитать число блоков, занятых в текущем поддереве под следующие файлы: *.*, *.с, *.txt
Здравствуйте, помогите, пожалуйста, с задачей. Не знаю с чего начать. Дали методичку по данной лабораторной работе, но ничего толкового в...

Получить родительский каталог папки, где находится приложение
Доброго времени суток! У меня возникла одна проблема. Я программно определил путь к папке с помощью...

Как получить родительский каталог относительно указанного пути
Как организовать обратный переход по папкам в С#? Например: 2 папка лежит в первой, мне необходимо из 2 выйти в первую и там уже...

Подсчитать число каталогов в родительском каталоге. Напечатать их имена и номера блоков, соответствующих файлам
Здравствуйте! У меня есть задание звучит так &quot;Подсчитать число каталогов в родительском каталоге. Напечатать их имена и номера блоков,...

Откуда берется число в строчке j = fs.Length / 231; //231 — количество байт занимаемых одним объектом класса ?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru