Автор Тема: Търся скелет код на демон за Linux  (Прочетена 2442 пъти)

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Здравейте,
    Не мога са намеря в интернет свестен пример за скелет на демон писан на C++. Повечето са писани на С.

Има ли някой който да има скелет на C++ демон?

поздрови
« Последна редакция: Jan 19, 2011, 00:21 от rcbandit »
Активен

n00b

  • Напреднали
  • *****
  • Публикации: 1248
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #1 -: Jan 19, 2011, 01:02 »
По-голяма част са писани на C защото идват от ера когато C++ не е съществувал.

По-скоро вземи направи следното - хвани един на C и в момента в който ще трябва да направи важната работа си направи един singelton object в който ще направиш основното. Ще имаш малко главоболие докато направиш разни events от C да ти викат C++ но мисля че ще е сравнително лесно.

Отделно кода ти ще е максимално гъвкъв.

PS: На някой места C++ е мръсна дума - deamons, kernel, drivers, etc...
Активен

mobilio - професионални мобилни приложения

Arvigeus

  • Напреднали
  • *****
  • Публикации: 123
  • Distribution: Arch Linux
  • Window Manager: Whatever
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #2 -: Jan 19, 2011, 07:58 »
Демон?
sudo killall
sudo killALL
sudo KILLALL!!!
Лесно...

(sorry)

На някой места C++ е мръсна дума - deamons, kernel, drivers, etc...
Имаше си причина за това. Мисля, че беше нещо свързано с производителността...
« Последна редакция: Jan 19, 2011, 07:59 от Arvigeus »
Активен

hyankov

  • Напреднали
  • *****
  • Публикации: 86
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #3 -: Jan 19, 2011, 10:05 »
Проблеми има, но опрделено не е производилтеността. По-добре да не задълбаваме, тъй като е въпрос на митове и съмнителни проучвания.

Както и да е. http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html това е първият туториал, на който попаднах ... да, реализиран е на C, но след бърз преглед не видях причина да не може да го напише на С++.

Всъщност, rcbandit, от кое предимство на С++ искаш да се възползваш, че толкова те притеснява как ще стане?
Активен

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #4 -: Jan 19, 2011, 22:42 »
Отказвам се - по-добре да науча С
Активен

hyankov

  • Напреднали
  • *****
  • Публикации: 86
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #5 -: Jan 19, 2011, 22:49 »
// offtopic

Така да беше почнал! Не е по-добре, а е задължително. Хора, които не са научили С и започват направо да пишат на С++ или Джава в по-голямата си част са онези, които създават лошото име на тези езици :)

Въпреки, че съм бесен почитател на С++, трябва да призная, че най-елегантният език (лично за мен) е С!

Успех с начинанието, ако имаш нужда от помощ, знаеш къде да я намериш!

Поздрави :)
Активен

Arvigeus

  • Напреднали
  • *****
  • Публикации: 123
  • Distribution: Arch Linux
  • Window Manager: Whatever
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #6 -: Jan 20, 2011, 00:18 »
Честно казано, мисля че е по-добре първо да се учи Java, после C. Причината - C изглежда прекалено сложен за неопитния потребител. Java е несъмнено по-атрактивен и е полезен като помагало за разбиране на основните на програмирането. После задължително курс по C за да се научи наистина ефективно програмиране, и после се оставя на човека да си реши. Естествено Java може да бъде заменен със всеки друг език от високо ниво. Аз лично сега се уча на Vala, което си е 2в1 - пишеш на високо ниво, компилатора генерира нормален C код.
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Търся скелет код на демон за Linux
« Отговор #7 -: Jan 20, 2011, 01:12 »
Честно казано, мисля че е по-добре първо да се учи Java, после C. Причината - C изглежда прекалено сложен за неопитния потребител. Java е несъмнено по-атрактивен и е полезен като помагало за разбиране на основните на програмирането. После задължително курс по C за да се научи наистина ефективно програмиране, и после се оставя на човека да си реши. Естествено Java може да бъде заменен със всеки друг език от високо ниво. Аз лично сега се уча на Vala, което си е 2в1 - пишеш на високо ниво, компилатора генерира нормален C код.

task чуваш ли какво говори :D :D
+1
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

hyankov

  • Напреднали
  • *****
  • Публикации: 86
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #8 -: Jan 20, 2011, 11:52 »
Ще се въздържа от коментар, тъй като има подобна тема за езиците и как трябва да се подходи. По-горе беше личното ми мнение и не ангажирам никого с него. Просто според мен бъркаш.
Активен

chen_dzen

  • Напреднали
  • *****
  • Публикации: 623
  • Distribution: Debian 6.0 Squeeze
  • Window Manager: GNOME
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #9 -: Jan 22, 2011, 02:22 »
Код
GeSHi (C++):
  1. include <sceleton.h>
  2.  
  3. using namespace semetary;
  4.  
  5. while(corpse==die) {
  6.                                    return tamqn;
  7.                             }
  8. :D
  9.  
  10. //////////////////////////////////////////////////маитапа настрана//////////////////////////////////////////////
  11.  
  12. // $Id: skeleton.h,v 1.1 2009/07/05 10:43:44 sms Exp $
  13.  
  14. //
  15. // A skeleton class declaration.
  16.  
  17. // References:
  18. // 1. Effective C++. Second Edition.
  19. // Scott Meyers.
  20. // ISBN: 0-201-92488
  21. //
  22. // 2. The C++ Programming Language
  23. // Bjarne Stroustrup.
  24. // ISBN: 0-201-53992-6
  25. //
  26.  
  27. #include <iostream> // No .h (Ref 1 Item 2)
  28.  
  29. class CCCCC: public BBBBB
  30. {
  31. public:
  32.    // Constructors.
  33.    //   Initialisation List
  34.    //   initialise all pointers (to zero) (Ref 1 Item 6, 12).
  35.    //   list members in order declared in class (Ref 1 Item 13).
  36.  
  37.    // Default Constructor
  38.    // The system will always provide one so make this private if you don't
  39.    //  want it (Ref 1 Item 27). Remove the function if the default is ok.
  40.    // Used:
  41.    //  CCCCC c1;
  42.    CCCCC ()
  43.    {};
  44.  
  45.    // Copy constructor.
  46.    // The system will always provide one so make this private if you don't
  47.    //  want it (Ref 1 Item 27). Remove the function if the default is ok.
  48.    // You will need to provide one if dynamic memory is used (Ref 1 Item 11).
  49.    // Used:
  50.    //  CCCCC c1(c2);
  51.    //  pass by value to function.
  52.    //  return value from function
  53.  
  54.    CCCCC (const CCCCC& rhs)
  55.    {
  56. // Assign new dynamic memory and and copy over data (Ref 1 Item 11).
  57.  
  58.    }
  59.  
  60.    // Destructor
  61.    // The system will always provide one so make this private if you don't
  62.    //  want it (Ref 1 Item 27). Remove the function if the default is ok.
  63.    // You will need to provide one if dynamic memory is used (Ref 1 Item 11).
  64.    // This should be virtual for Base classes.
  65.  
  66.    virtual ~CCCCC ()
  67.    {
  68. // Delete all dynamic memory (Ref 1 Item 6).
  69.    };
  70.  
  71.    // Operators.
  72.    // Assignment operator.
  73.    // The system will always provide one so make this private if you don't
  74.    //  want it (Ref 1 Item 27). Remove the function if the default is ok.
  75.    // You will need to provide one if dynamic memory is used (Ref 1 Item 11).
  76.  
  77.    CCCC& operator= (const CCCCC& rhs)
  78.    {
  79. // Don't copy to self (Ref 1, Item 17).
  80. if (this != &rhs)
  81. {
  82.    // Make sure that the base class assigns too (Ref 1 Item 16).
  83.    BBBBB::operator= (rhs);
  84.  
  85.    // Delete existing memory from this and assign new
  86.    // (Ref 1 Item 6, 11).
  87.    // Copy data from (non-NULL) pointers into new memory.
  88.    // Assign all data members (Ref 1 Item 16).
  89.  
  90. }
  91. // Returns *this (Ref 1 Item 15).
  92. return *this;
  93.    }
  94.  
  95.    // Address of operator (non const).
  96.    // The system will always provide one so make this private if you don't
  97.    //  want it (Ref 1 Item 27). Remove the function if the default is ok.
  98.    // Used:
  99.    //  CCCCC *c1 = &c2;
  100.  
  101.    CCCC* operator& ()
  102.    {
  103. return (this);
  104.    }
  105.  
  106.    // Address of operator (const).
  107.    // The system will always provide one so make this private if you don't
  108.    //  want it (Ref 1 Item 27). Remove the function if the default is ok.
  109.    // Used:
  110.    //  const CCCCC *c1 = &c2;
  111.  
  112.    const CCCC* operator& () const
  113.    {
  114. return (this);
  115.    }
  116.  
  117.  
  118.    // The following operators can be declared (Ref 2 Section 7.2):
  119.    // +   -   *   /   %   ^   &   |   ~   !
  120.    // =   <   >   +=  -=  *=  /=  %=  ^=  &=
  121.    // |=  <<  >>  >>= <<= ==  !=  <=  >=  &&
  122.    // ||  ++  --  ->* ,   ->  []  ()  new delete
  123.    // NB: CCCC operator++ () is pre-increment.
  124.    //     CCCC operator++ (int) is post-increment.
  125.    // There should be no public data members (Ref 1 Item 20).
  126.  
  127. private:
  128.  
  129. protected:
  130. }
  131.  
  132.  
  133. // I/O
  134. // Declare these in header file.
  135. // Define them in a source file
  136. //
  137. // Input
  138. // This is never a class member (Ref 1 Item 19).
  139. // Maybe a friend (Ref 1 Item 19).
  140. // Maybe use an access function.
  141.  
  142. istream& istream::operator>> (istream& in, CCCCC ccc)
  143. {
  144.    // (Ref 1 Item 19)
  145.    // Ensure (perhaps by using accesors):
  146.    // Delete any dynamically allocated data that will be overwritten
  147.    // Allocate new dynamically allocated data
  148.    // Read in data and set new values. eg:
  149.    // in >> newData;
  150.    // ccc.SetValue (newData);
  151.    return (*in);
  152. }
  153.  
  154. // Output
  155. // This is never a class member (Ref 1 Item 19).
  156. // Maybe a friend (Ref 1 Item 19).
  157. // Maybe use an access function.
  158.  
  159. ostream& ostream::operator<< (ostream& out, CCCCC ccc)
  160. {
  161.    // Extract the data from the object. eg:
  162.    // out << ccc.printable();
  163.    return (*out);
  164. }
  165.  
  166.  
« Последна редакция: Jan 23, 2011, 17:50 от VladSun »
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Търся скелет код на демон за Linux
« Отговор #10 -: Jan 22, 2011, 15:56 »
Демонът трябва да прави малко повече неща от това да цикли безкрайно, чакайки някакъв вход там. На първо време трябва да форкне нов процес и да излезе от parent процеса, идеята е че така се изпълнява в "background", ppid-а му става този на init - 1. Трябва да се detach-не от контролния терминал, това става лесно със setsid() - идеята е при логаутване на потребителят, който е викнал демона, да не пристигне сигнал SIGHUP и като не се прихваща, демона да пукне. Също така да затвори стандартния вход/изход, за да не цапа по конзолата на потребителя, който го е пуснал. Евентуално да си смени текущата директория, файлови маски и т.н. неща. В смисъл не е чак толкова като нищо да не е :)
Активен

"Knowledge is power" - France is Bacon

chen_dzen

  • Напреднали
  • *****
  • Публикации: 623
  • Distribution: Debian 6.0 Squeeze
  • Window Manager: GNOME
    • Профил
Re: Търся скелет код на демон за Linux
« Отговор #11 -: Jan 22, 2011, 16:59 »
 
Код
GeSHi (C++):
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <fcntl.h>
  6. #include <errno.h>
  7. #include <unistd.h>
  8. #include <syslog.h>
  9. #include <string.h>
  10.  
  11. int main(void) {
  12.  
  13.        /* Our process ID and Session ID */
  14.        pid_t pid, sid;
  15.  
  16.        /* Fork off the parent process */
  17.        pid = fork();
  18.        if (pid < 0) {
  19.                exit(EXIT_FAILURE);
  20.        }
  21.        /* If we got a good PID, then
  22.            we can exit the parent process. */
  23.        if (pid > 0) {
  24.                exit(EXIT_SUCCESS);
  25.        }
  26.  
  27.        /* Change the file mode mask */
  28.        umask(0);
  29.  
  30.        /* Open any logs here */        
  31.  
  32.        /* Create a new SID for the child process */
  33.        sid = setsid();
  34.        if (sid < 0) {
  35.                /* Log the failure */
  36.                exit(EXIT_FAILURE);
  37.        }
  38.  
  39.  
  40.  
  41.        /* Change the current working directory */
  42.        if ((chdir("/")) < 0) {
  43.                /* Log the failure */
  44.                exit(EXIT_FAILURE);
  45.        }
  46.  
  47.        /* Close out the standard file descriptors */
  48.        close(STDIN_FILENO);
  49.        close(STDOUT_FILENO);
  50.        close(STDERR_FILENO);
  51.  
  52.        /* Daemon-specific initialization goes here */
  53.  
  54.        /* The Big Loop */
  55.        while (1) {
  56.           /* Do some task here ... */
  57.  
  58.           sleep(30); /* wait 30 seconds */
  59.        }
  60.   exit(EXIT_SUCCESS);
  61. }
  62.  
  63.  

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Mandrake Linux 10 and Linux
Настройка на програми
aaaSASlover 3 8818 Последна публикация Dec 08, 2012, 20:46
от UBIGI
Remote връзка Linux<--> Linux
Настройка на програми
stoyanovs 5 7431 Последна публикация Jan 24, 2006, 16:49
от gostenin
Experienced linux enginnced linux engineers
Търсене
bulwork 0 7493 Последна публикация May 10, 2008, 14:24
от bulwork
Dual boot Linux and Windows XP (Linux installed first) ПРОБЛЕМ !!!
Настройка на програми
XaMeLeOnA 36 39399 Последна публикация Nov 06, 2011, 02:58
от Compare
Linux From Scratch - Do-it-yourself-Linux
Начини за увеличаване на бързодействието
neosofti 2 4674 Последна публикация Jul 03, 2009, 08:43
от tyuio