Обсуждение статьи тематического каталога: Пишем ДЕМОНА своими руками (daemon gcc proccess)Ссылка на текст статьи: http://www.opennet.ru/base/dev/daemon_example.txt.html
>Мы не будем использовать объектно-ориентированное-программирование (ООП)
>(в некоторых случаях для него нужны иксы(X windows)),В шоке, нах, прям с первых строк.
мда - даже код смотреть не буду
Хехе. А время на коменты выделил.
Статья написана из соображений недоступности рускоязычной литературы по данным вопросам,
а также многим моим знакомым, которые относятся к программированию под Linux
как к чему-то сверхестественному."Профессиональное программирование для Linux" вышла еще в 2001 году. Может посматривать вокруг себя надо)) Хотя этот труд обращает на себя внимание))
>Статья написана из соображений недоступности рускоязычной литературы по данным вопросам,
>а также многим моим знакомым, которые относятся к программированию под Linux
>как к чему-то сверхестественному.
>
>"Профессиональное программирование для Linux" вышла еще в 2001 году. Может посматривать вокруг
>себя надо)) Хотя этот труд обращает на себя внимание))Вы имеете ввиду книгу авторов (Марк Митчел, Джеффри Оулдем, Алекс Самьюэл) ну так это пародия на язык. Те темы, которые авторы понимают описаны отлично, но где они сомневаются ограничено общими словами.
ну посмотрел в код, убила функция getTime()
в которой есть строчка: ret=(char*)malloc(100);
но вот какая грабля: нигде это не освобождается,
так что это утечка памяти. явная. грубая.
дальш читать не стал
Да будет ВАМ известно что память освобождается когда умирает процесс
а ничего, если демон своим perror-oм будет гнать в stderr ? ;)
Ничего..... иначе как новичёк поймет от чего демон не работает
Там просто нету строчки что программу для использования надо доработать напильником :)
>Там просто нету строчки что программу для использования надо доработать напильником :)
>А Вы наверное хотели чтобы я профессионально написал код но коменты сократил.......иногда для понимания чем то жертвуешь в угоду читающему. И еще замечу , что я никому никогда ничего не писал. Все кто обращался писали сами после объяснения.
тихий ужас... Одна такая статья может испортить несколько начинающих программистов, если они вдруг решат учиться по данной статье.
дескрипторы не закрываются, код возврата половины функций не проверяется, cwd не меняется....
Аффтор,видимо, один из тех, кто думает, раз все у него заработало - то он все сделал правильно и можно учить других.
Ужас в журналах не печатают
Еще как печатают, иногда даже воруют статьи с опеннета 2-3 годовой давности и печатают в журналах под своим именем. :)
Нда, НОВИЧКАМ НЕ ЧИТАТЬ !!!! Вот и все что можно сказать
>Нда, НОВИЧКАМ НЕ ЧИТАТЬ !!!! Вот и все что можно сказатьа что читать новичкам?
Жесть...
Почему не посмотреть на принцип работы демона? Мне кажется автор это здесь хотел показать, а не навыки программинга в Си :) Я вообще практически "0" в Си, но стоит вопрос написать демона. Как и примерно его делать -- не знаю. Мне пофиг какие там дискрипторы, cwd и прочее не закрыты и не используются, прочитал и стало вообщем-то ясно как должен выглядеть демон. Всё остальное от программера зависит ;)
Так держать!
текст кода был взят из первых моих программ, которые мне приходилось писать практически вслепую... и если, кого там смущает malloc? да пусть новички познакомятся с этой функцией......И скорее всего они не знают о функции getopt(). Половина не знает как работать с файлами, половина вообще о сигналах ничего не знает. Другая половина никогда не работала с сокетами, файлами. Данный пример охватывает все возможности языка СИ.
Конечно можно было написать так
char *getTime(char *time_format)
{
struct tm *tm;
time_t now;
static char rt[80];
now = time(0);
tm = localtime(&now);
strftime(rt,sizeof(rt),time_format,tm);
return (rt);
}
половина бы пропустила директиву static и на выходе получила бы абракадабру.
Так что код приведенный здесь рассчитан на начальный уровень программирования. И чтоб все получилось с первого раза.
Наверное большинство, кто высказался здесь.....сразу родились этакими суперпрограмерами. И наверно утилиту Valgrind впитывали с молоком матери.
Ты в создании сокета в функции Daemon() при создании самого сокета первым п-м используешь const
PF_INET, а в структуре sockaddr_in name в поле name.family используешь const AF_INET.
Вопрос: скажи,а это никак не скажется на работе программы?(так как я и там и там в сокетах использовал
const AF_INET)
Слишком сложно получается, по-моему, можно было бы обойтись и меньшей кровью
Нормальная статья. Как отправная точка, я бы сказал, незаменимая. В программе - готовый скелет для демона, а глюки можно поправить, если руки растут не из жо...
to Zving: А мне бы было интересно увидеть от Вас статью-дополнение или статью-ответ.
Мда много умников сразу накинулось прокоментировать...
Но ни один из коментарием не стоит даже одного слова из статьи...
http://linuxportal.ru/entry.php/2361_0_3_0_C/
статья 4-го года переведена в 6-м
Необходимо добавить библиотеку stdlib.h, в которой располагается метод exit
Спасибо за статью. Как всегда, после написания появляются "умники", которые конкретно никогда никому не помогают, а могут только лажать, да в гугл отсылать.
Достаточно давно уже на общественных началах кодю открытый тулкит для разработки серверов на плюсах: http://isl.storozhilov.com/ - может это как-то может помочь начинающим? Да и вообще, может кто мнение свое скажет, надо ли оно? А то я пишу, пишу... :)
Большое спасибо за код! Я как раз искал пример демона для новичков.
http://admin-world.net/content/view/17/29/
Советую почитать, описано достаточно хорошо.