The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Определение размеров файлов в каталоге"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Определение размеров файлов в каталоге"  
Сообщение от BigHarry (??) on 30-Май-07, 18:46 
Здравствуйте !
Я в Си не силен, поэтому прошу сразу извинить за ламерский вопрос.
Мне нужна програмка на Си, которая бы вывела в консоль имена файлов в каталоге и их размер. Путем долгой медитации с Гуглем и Яндексом родилось у меня следующее уродство:
=======================================================================================
#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>

int
main (void)
{
DIR *dir;
struct stat st;

dir = opendir("/var/log/apache/");

    if (!dir) {
        printf ("Cannot read directory contents\n");
        return 1;
    }

    struct dirent* de;

    while( (de = readdir(dir)) != 0 )
        {

        if (strcmp (de->d_name, ".") == 0 || strcmp (de->d_name, "..") == 0) continue;

        stat(strcat("/var/log/apache/",strrchr(de->d_name,'\0')), &st);
        printf("File: %s Size: %d bytes\n", de->d_name, st.st_size);

    }
    closedir(dir);
    return 0;
}
=======================================================================================
Мое твареньице успешно компилируется, но работать не хочет - система (FreeBSD) сообщает:
Bus error (core dumped)
и на этом все заканчивается.
Вся беда, судя по всему, находится в этой строке:
stat(strcat("/var/log/apache/",strrchr(de->d_name,'\0')), &st);
ибо если ее закоментировать - то программа работает, но, ессно, не дает нужного результата.
Помогите, пожалуйста, победить эту напасть.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Определение размеров файлов в каталоге"  
Сообщение от vic (??) on 30-Май-07, 19:17 
>        stat(strcat("/var/log/apache/",strrchr(de->d_name,'\0')), &st);
тут две ошибки
1. делаешь strcat к константной строке.
2. зачем-то вызываешь strrchr да еще с неправильными параметрами

исправляем:
char filename[NAME_MAX + 100]; // по хорошему не так надо, но для этого примера сгодится. strcpy(filename, "/var/log/apache/"); //поместили каталог
strcat(filename, de->d_name); // добавили имя
if (!stat(filename, &st))
  //printf
else
  //error


p.s. Прочти книгу Кернигана и Ричи (она тоненькая) и все станет ясно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Определение размеров файлов в каталоге"  
Сообщение от vic (??) on 30-Май-07, 19:18 
упс пример поехал))

char filename[NAME_MAX + 100]; // по хорошему не так надо, но для этого примера сгодится.
strcpy(filename, "/var/log/apache/"); //поместили каталог
strcat(filename, de->d_name); // добавили имя
if (!stat(filename, &st))
  //printf
else
  //error

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Определение размеров файлов в каталоге"  
Сообщение от A on 31-Май-07, 08:28 
>p.s. Прочти книгу Кернигана и Ричи (она тоненькая) и все станет ясно.

А если не сложно, не утоните, какую именно и (в идеале) где продаётся (Москва).


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Определение размеров файлов в каталоге"  
Сообщение от Romik (??) on 31-Май-07, 08:55 
Интересно, как вы не догадались посмотреть исходники команды ls :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Определение размеров файлов в каталоге"  
Сообщение от vic (??) on 31-Май-07, 08:59 
>Интересно, как вы не догадались посмотреть исходники команды ls :)

По каждому чиху лезть в исходники тоже не гуд..

Книга: http://www.ozon.ru/context/detail/id/96537/
должна быть в любом магазине где есть нормальный компьютерный отдел.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Определение размеров файлов в каталоге"  
Сообщение от BigHarry (??) on 31-Май-07, 16:30 
>Интересно, как вы не догадались посмотреть исходники команды ls :)

Да смотрел, вот тока поиском не нашел там ни вызова функции opendir, ни вызова функции stat.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Определение размеров файлов в каталоге"  
Сообщение от vic (??) on 31-Май-07, 17:34 
>>Интересно, как вы не догадались посмотреть исходники команды ls :)
>
>Да смотрел, вот тока поиском не нашел там ни вызова функции opendir,
>ни вызова функции stat.

Эти функции системные их искать не нужно :) достаточно man opendir и man 2 stat.
Ошибки не связаны с этими функциями, а связаны с непониманием что есть C-строки, как с ними работать, как выделять память, как такие строки копировать, именно поэтому и зашел разговор про книгу авторов языка :)

Удачи.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Определение размеров файлов в каталоге"  
Сообщение от BigHarry (??) on 31-Май-07, 23:06 
>Эти функции системные их искать не нужно :) достаточно man opendir и
>man 2 stat.
Да в мане написано без примеров и по англицки.
Думал - в исходниках можно будет содрать готовый вариант, да не тут-то было, в гугле и то больше инфы...
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Определение размеров файлов в каталоге"  
Сообщение от BigHarry (??) on 31-Май-07, 16:31 
>тут две ошибки
>1. делаешь strcat к константной строке.
>2. зачем-то вызываешь strrchr да еще с неправильными параметрами

СПАСИБО !!!!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру