LINUX.ORG.RU

Нужно проверить на правильность код


0

0

Прошу помощи специалистов проверить код, листинг поместить на форум не получается поэтому закинул на хост www.eu8cc.narod.ru/lab.c Буду очень благодарен за помощь

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

делал по данной рекомендации: Делается рекурсивная функцияБез подсветки 1: void find(char const *dirname,int minsize,int maxsize,FILE *out); 2. В ней открываете директорию (man 3 opendir) и читаете друг за дружкой все файлы в ней (man 3 readdir). 3. Если это обычный файл, смотрите его размер (man 3 stat), сравниваете с minsize и maxsize; условие проходит - пишите имя файла в out (man 3 fprintf). Если это директория, отправляетесь в рекурсию (man 7 рекурсия). 4. В main читаете аргументы командной строки и передаете их в эту функцию. 5... 6. PROFIT

//int minsize,int maxsize,FILE *out - можно сделать глобальными.



Последнее исправление: eu8cc (всего исправлений: 1)

> Делается рекурсивная функцияБез подсветки

Это как? В темноте. Ваш код работает? Если да, то что там проверять?

sleepflint ★★★
()

Зачетная неделя началась уже?

yoghurt ★★★★★
()
Ответ на: комментарий от eu8cc

>код можно посмотреть по ссылке http://www.eu8cc.narod.ru/lab.c Пожалуйста, если можно

Пожалуйста, если можно, выкладывайте код на pastebin-сервисы, там можно смотреть код не качая.

anonymous
()
Ответ на: комментарий от anonymous

>он не правильный и работать не будет.:)

Не ври, там всё нормально. Пусть ТС несёт сдавать преподавателю, лабу примут.

anonymous
()
Ответ на: комментарий от anonymous

Мне его нужно скомпилировать, там точно есть ошибки. Подскажите пожалуйста, что там нужно подправить

eu8cc
() автор топика
Ответ на: комментарий от anonymous

Тссс, ты ещё про вызов find() без параметров скажи.

ТС-у: сдавай, сдавай, преподаватель будет доволен, точно говорю.

Кстати, ТС, ты знаешь название языка, на котором оно написано, только честно?

anonymous
()

Слишко много строк. Должно быть так:

#!/bin/sh

find $3 -type f -size +$1 -size -$2 -printf '%h %f %s\n' > $4

echo `find $3 -type f | wc -l` files processed
baverman ★★★
()

Кстати, в структуре dirent нет поля st_size - это из структуры stat. Для рекурсивного запуска find не мешало бы передать этой функции параметры, в таком виде, как сейчас, компилятор ругнется и ничего делать не будет.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от eu8cc

мне нужно написать

Ну так и напиши. А этот исходник ты где-то стащил, и наверняка ни строчки не понимаешь. Хочешь чтобы за тебя написали — тут рядом раздел Job.

GotF ★★★★★
()
Ответ на: комментарий от eu8cc

Это твой исходник? И прочитай man stat, opendir, readdir. Попробуй скомпилировать программу и посмотреть на ошибки,предупреждения и попрбуй сначала сам исправить их. ^_^

anonymous
()
Ответ на: комментарий от anonymous

это мой исходник, я его и писал. Скомпилировать не могу, поставил OpenSUSE но компилятор gcc не работает

eu8cc
() автор топика
Ответ на: комментарий от eu8cc

Если ты этот код сам писал, то знаешь: имя новой директории, минимальный размер, максимальный размер и имя файла для вывода информации. Чтобы узнать размер файла советую почитать man 2 stat.

Но я не думаю, что будет красиво выдавать кучу данных вперемешку - лучше уж накапливать вывод в буфер, потом сортировать и выдавать уже в отсортированном виде. Или же в конце заполнения файла считать его целиком в оперативку, отсортировать и заменить содержимое на отсортированное.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Сейчас попробую разобраться с stat, просто срочно нужно сделать, а проверять и компилировать нету где

eu8cc
() автор топика
Ответ на: комментарий от eu8cc

>это мой исходник, я его и писал. Скомпилировать не могу, поставил OpenSUSE но компилятор gcc не работает

gcc не работает - это как минимум странно.

Вообще, если ты его сам писал, то в принципе не всё очень ужасно. Ошибки проверяются, код выглядит прилично. Вот только не работает. Как минимум посмотри на вызов find без параметров, который должен быть с параметрами, и на упомянутые выше структуры.

Но что-то кажется ты лукавишь, если ты сам писал, то откуда такие ошибки? Задача то не особо сложная.

anonymous
()
Ответ на: комментарий от eu8cc

проверять и компилировать нету где

Поставь на свой мастдай gcc. Без компиляции ошибки никогда не найдешь - могут быть опечатки и т.п.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

писал сам, просто нету времени капать кучу теории, могут и на сессию не пустить. А за советы большое Вам всем спасибо, может разберусь. Раньше я запускал компилятор на SUSE, он по началу у меня не стоял я его установил. Сейчас не могу запустить компиляцию Писал !gcc файл, и gcc файл Не компилирует

eu8cc
() автор топика
Ответ на: комментарий от eu8cc

Может из-за ошибок не компилирует :) Может тебе нужно показать сообщения компилятора об ошибках? Есть еще такие . и .. - жесткие ссылки на текущий и родительский каталог, их надо пропускать. А что ты будешь делать с символическими ссылками?(man lstat).

anonymous
()
Ответ на: комментарий от anonymous

Символические ссылки думаю мне не нужны

eu8cc
() автор топика
Ответ на: комментарий от Eddy_Em

>Если время появится, советую посмотреть исходники find.

...и книжку Кернигана и Ричи :)

anonymous
()
Ответ на: комментарий от Eddy_Em

Согласен, там алгоритм работы будет написан

eu8cc
() автор топика
Ответ на: комментарий от eu8cc

писал сам, просто нету времени капать кучу теории, могут и на сессию не пустить.

*неразборчиво* У тебя был целый семестр, *неразборчиво*! Кому вообще нужны такие, *неразборчиво*, программисты?

GotF ★★★★★
()
Ответ на: комментарий от GotF

Моя деятельность далека от программирования, а проблема у меня одна не работает компилятор, может я эти все ошибки давно обнаружил бы

eu8cc
() автор топика
Ответ на: комментарий от eu8cc

не работает компилятор

Что значит «не работает»? Какие сообщения появляются при попытке компиляции? Если пишет

lab.c:16: ошибка: expected identifier or '(' before '{' token
lab.c: В функции 'main':
lab.c:75: ошибка: 'dirname' не описан (первое использование в этой функции)
lab.c:75: ошибка: (Сообщение о неописанном идентификаторе выдается один раз
lab.c:75: ошибка: для каждой функции, в которой он используется.)
lab.c:76: ошибка: expected ';' before 'find'
то все нормально - это ошибки в коде.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от eu8cc

>Моя деятельность далека от программирования

мне нужно написать программку на си под линукс!!!

Что за специальность?

anonymous
()
Ответ на: комментарий от anonymous

> Что за специальность?

лоботряс же

anonymous
()
Ответ на: комментарий от anonymous

))) поверте, я попробую скомпилировать, просто мой компилятор даже простенькую программу типа Hello World не хочет компилировать, что не говоря о этой прогу

eu8cc
() автор топика
Ответ на: комментарий от eu8cc

поверте, я попробую скомпилировать

do. or do not. there is no try

я тебе выше ссылку дал на online-компилятор, чего тебе ещё для счастья не хватает?

jtootf ★★★★★
()
Ответ на: комментарий от eu8cc

пробуй-пробуй)
когда скомпилишь свою первую программу - расскажи маме и пае, они так обрадуются!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.