[rešeno] Deamons
Dobrodošli, Gost. Molim vas prijavite se ili se registrujte.
Da li ste izgubili vaš aktivacioni e-mail?

Prijavite se sa korisničkim imenom, lozinkom i dužinom sesije

Linuxo Forumi

Stranice: 1 [2] 3   Idi dole
  Štampaj  
Autor Tema: [rešeno] Deamons  (Pročitano 2673 puta)
0 članova i 1 posetilac pregledaju ovu temu.
BrokeBody
Me, I and Myself
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 2230



WWW
« Odgovor #15 poslato: 29 Август 2007, 00:39:00 »

ajde cisto da se nadovezem na off:

Kaze "He's Harry Ploper now"

Ah, da. ;)
Prijavi uredniku   Sačuvana

dejanium
Hero Member
*****
Van mreže Van mreže

Poruke: 809


sangoma


« Odgovor #16 poslato: 29 Август 2007, 07:50:06 »

i dalje je off

tu je i verzija za ljubitelje klasike  Azn
Prijavi uredniku   Sačuvana

Uzdaj se u se i svoj openSuSE!
GoranSTX
The inevitable...
Global Moderator
Hero Member
*****
Na mreži Na mreži

Pol: Muškarac
Poruke: 1014


Autoportret autostopera


« Odgovor #17 poslato: 29 Август 2007, 08:54:30 »

E, hvala za SpiderPig temu, bice hit na poslu danas...

Nego da ja vas ljubitelje Simpsonovih pitam, sta nam je to lepo nagovestila Megi?
Prijavi uredniku   Sačuvana

http://autostoper.blogspot.com
Two things are infinite: the universe and human stupidity; and I'm not sure about the universe. (Einstein)
Registered Linux User #411782
http://counter.li.org/
jboban
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 841



« Odgovor #18 poslato: 29 Август 2007, 17:05:39 »

Jednu od svojih aplikacija tipa WEB servera sam prema ovom uputstvu promenio da radi kao daemon, ali više ne radi isto kao pre. Koristim QTcpServer i listen() metodu i dobijam grešku tipa "Unknow error" prilikom poziva ove metode. Port na kome server sluša je isti kao pre, a interface Any (0.0.0.0), isto kao pre izmene. Iz nekoliko pokušaja ubijanja pokrenutog daemon-a i ponovnog startovanja listen() metoda je vratila korektan rezultat i program je radio isto, ali u svim ostalim slučajevima vraća grešku. Šta može biti problem?

Evo i parčeta koda:
Kod:
    // Create TCP server
    if (!listen(QHostAddress::Any, 4243)) {
        LOG("Unable to start the server: " << errorString());
        m_bBadInit = true;
    }
Prijavi uredniku   Sačuvana
sysctl
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 168


spiderpig


« Odgovor #19 poslato: 29 Август 2007, 21:57:51 »

Prvo, koliko sam ja shvatio (a nisam mnogo  Cheesy) koristis QT framework ( njegov net modul ) za network programiranje, sto je losa praksa, ali kad mora 'ajde. Dalje, izgleda da si tvoju klasu izveo iz QTcpServer cim pozivas listen i errorString bez objekta, ako je tako stavi potpuni kvalifikator bazne klase ispred listen, jer izgleda da se umesto QTcpServer::listen, poziva listen iz <sys/socket.h> i to prolazi  nekim cudom  Cheesy listen ima sledeci oblik
Kod:
int listen(int sockfd, int backlog);

QHostAddress::Any je ustvari 4 (ali ovde u smislu socket deskriptora), sto znaci da se poziva

Kod:
listen(4,4243);

AKo nije to, onda mozda zavisi od toga kako si detach-ovao klasu da bude daemon. Najbolje je da koristis QProcess::startDetached. I jos nesto, losa praksa je mesati low-level C programiranje sa "high" level framework-om kao sto je QT, koliko je god moguce koristi QT i izbegavaj sve ostalo.  Afro

over and out.
Prijavi uredniku   Sačuvana

Kod:
    fprintf(stderr,"iza svakog %d ugla vreba Dragan Kojic Keba\n",i++);
jboban
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 841



« Odgovor #20 poslato: 30 Август 2007, 14:14:33 »

koristis QT framework
Jeste. Omaklo mi se ono jedno Q u QHostAddress i provaljen sam  Wink

sto je losa praksa, ali kad mora 'ajde
Nije baš da se mora, ali kad je sve drugo u Qt-u, zašto ovo ne bi bilo? Zašto loša praksa?

Dalje, izgleda da si tvoju klasu izveo iz QTcpServer cim pozivas listen i errorString bez objekta, ako je tako stavi potpuni kvalifikator bazne klase ispred listen, jer izgleda da se umesto QTcpServer::listen, poziva listen iz <sys/socket.h>
Da, izvedena je iz QTcpServer, ali ne mislim da se poziva pogrešna funkcija jer je poziv u konstruktoru. Suvišno je pisati potpuni kvalifikator bazne klase ispred svake funkcije članice kad nije statička.

AKo nije to, onda mozda zavisi od toga kako si detach-ovao klasu da bude daemon.
Biće da je ovo. Izgleda da je rešeno ovako:

Kod:
    // Daemonize current process
    AppUtil::DoDaemonize();
    QCoreApplication app(argc, argv);
    // ...

U prvoj verziji, koja nije radila, ovaj QCoreApplication app(argc, argv) je bio na početku.

Najbolje je da koristis QProcess::startDetached.
Ovo je bila samo proba na osnovu pomenutog teksta, a probaću sad i ovaj, svakako bolji način.

I jos nesto, losa praksa je mesati low-level C programiranje sa "high" level framework-om kao sto je QT, koliko je god moguce koristi QT i izbegavaj sve ostalo.
Čak i za network programiranje?  cool
Naravno, zato sam taj deo i "zavio" malo u AppUtil  Afro
Prijavi uredniku   Sačuvana
sysctl
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 168


spiderpig


« Odgovor #21 poslato: 01 Септембар 2007, 16:05:26 »

Citat
Suvišno je pisati potpuni kvalifikator bazne klase ispred svake funkcije članice kad nije statička.

Nisam mislio ispred svake funkcije, vec samo ispred listen, ali ono ...

I radi li ? A zasto je AppUtil::DoDaemonize(); static ?

Jos nesto, sto su svi komentari u kodu na engleskom ?  Cheesy
Prijavi uredniku   Sačuvana

Kod:
    fprintf(stderr,"iza svakog %d ugla vreba Dragan Kojic Keba\n",i++);
jboban
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 841



« Odgovor #22 poslato: 03 Септембар 2007, 14:09:06 »

Nisam mislio ispred svake funkcije, vec samo ispred listen, ali ono ...
Kad ne treba, ne treba nigde.

I radi li ? A zasto je AppUtil::DoDaemonize(); static ?
Radi. Static zato što je bilo rano da se instancira i što je AppUtil Util klasa, kao što joj ime kaže. U tom trenutku, nije instanciran ni objekat glavne klase.

Jos nesto, sto su svi komentari u kodu na engleskom?
...umesto da su na staroslovenskom, ili bar srpskom i to ćirilicom  Evil

Razloga ima više. Evo nekoliko:
- ne znam kako bi kompajler sažvakao ćirilicu
- nazivi ostalih funkcija su na engleskom, pa zato i mojih
- ako su svi nazivi fukcija na engleskom, onda su i nazivi promenljivih na engleskom
- ako su svi nazivi fukcija i promenljivih na engleskom, onda su i komentari na engleskom
- iako neki kažu "Govori srpski da te ceo svet razume", ja se ne bih baš složio
- ...
 cool

P.S. Nastavak u sledećem broju.
Prijavi uredniku   Sačuvana
veljkopopovic
Newbie
*
Van mreže Van mreže

Poruke: 7


« Odgovor #23 poslato: 12 Септембар 2007, 14:35:14 »

Posto radite sa Qt-jem, imam par pitanja (prilicni sam pocetnik, tako da Vas ne cudi)  Smiley
1. jel mogu da razvijam deamon-e u KDevelop okruzenju?
2. ako sam dobro shvatio how to koji mi je ovde preporucen, cinjenica da zatvaram standardne fajl deskriptore (i jos ono posla pre, oko fork current process, session ID, umask) govori sistemu da je u pitanju deamon. Jel' to isto treba da uradim ako radim i u Qt-jevom framework-u? Pretpostavljam da ne treba da ukljucujem Qt-jeve GUI module u celu tu pricu jer ne zelim nikakvu interakciju sa korisnikom (ajde sto ja necu nego sto mi sistem ne da) Smiley Imam Qt klasu koju treba da iskoristim za pisanje deamon-a, da li sam na dobrom putu? Smiley

Pozdrav svima

Unapred hvala
Prijavi uredniku   Sačuvana
jboban
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 841



« Odgovor #24 poslato: 12 Септембар 2007, 23:24:38 »

1. jel mogu da razvijam deamon-e u KDevelop okruzenju?
Da. Ja sam tako uradio.

2. Jel' to isto treba da uradim ako radim i u Qt-jevom framework-u?
To nisam stigao da probam, ali mislim da treba. Jedino što ne moraš koristiti je fork(), nego možeš QProcess::startDetached.

Pretpostavljam da ne treba da ukljucujem Qt-jeve GUI module
Ne, oni su nepotrebni.
Prijavi uredniku   Sačuvana
sysctl
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 168


spiderpig


« Odgovor #25 poslato: 13 Септембар 2007, 00:19:51 »

Za razliku od jboban, ja se "protivim" pisanju daemon-a u Qt ili bilo kakvom drugom GUI framework-u.

Prvo, daemon treba da bude mali, brz i kao sto kazu da obavlja jedan posao, ali da ga obavlja dobro. Stavljanje jos jednog layer-a izmedju srzi programa i sistema nije dobra ideja, po mom misljenju. Naravno sve zavisi, od iskustva, znanja i svrhe programa. Dalje, ako se misli da Qt poseduje prednost jer je portabilan na vise platformi, ni sa tim se ne slazem. Daemon, napisan u C-u ce moci da se kompajlira skoro na svim *nix sistemima koji postuju posix, pa (uz sitne izmene) cak i na windows-u.

Qt je pre svega GUI framework. Njegov network modul poseduje dosta korisnih klasa, ali po mom ubedjenju ove klase sluze za dodavanje korisnih osobina glavnom GUI programu. Na primer, web interfejs za kontrolu GUI programa, ftp client, jednostavan tcp server za proveru statusa programa, itd...

I jos jedna stvar, za Qt3 bi daemon povukao citav libqt-mt kao zavisnost (negde oko 8mb), pocevsi sa Qt4 moduli su izdeljeni tako da bi povukao samo qtcore i qtnetwork (sto je negde oko 2mb), plus program.

Prijavi uredniku   Sačuvana

Kod:
    fprintf(stderr,"iza svakog %d ugla vreba Dragan Kojic Keba\n",i++);
jboban
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 841



« Odgovor #26 poslato: 13 Септембар 2007, 00:41:35 »

Najbolje je da koristis QProcess::startDetached. I jos nesto, losa praksa je mesati low-level C programiranje sa "high" level framework-om kao sto je QT, koliko je god moguce koristi QT i izbegavaj sve ostalo. 
Evil
Prijavi uredniku   Sačuvana
sysctl
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 168


spiderpig


« Odgovor #27 poslato: 13 Септембар 2007, 01:06:53 »

Ovo gore je istrgnuto iz konteksta.  Angry

Misli se ako MORAS da koristis Qt koristi samo Qt i ne mesaj ga sa libc mreznim pozivima.
I da ponovim: za mrezno programiranje sam PROTIV Qt-a.

Nemo' da mi izvrces reci, bre  Cheesy
Prijavi uredniku   Sačuvana

Kod:
    fprintf(stderr,"iza svakog %d ugla vreba Dragan Kojic Keba\n",i++);
jboban
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 841



« Odgovor #28 poslato: 13 Септембар 2007, 10:14:24 »

Naravno, šalim se. Povod je što je čovek izrazio želju ili potrebu da koristi Qt  Afro
Prijavi uredniku   Sačuvana
veljkopopovic
Newbie
*
Van mreže Van mreže

Poruke: 7


« Odgovor #29 poslato: 14 Септембар 2007, 14:37:35 »

Hvala, resili ste mi problem. Svakako je vodjena diskusija o tome da li na C-u ili na Qt -ju. Svakako ima manje "bola" sa Qt-jem i da je mnogo "podesnije" za pocetnike. Konkretno, u pitanju je RS232 rutina koja treba nesto da radi, pa zavisno od nje da se reaguje, tako da nece biti problem prebaciti se na C rutine ako se kolege sloze...


Pozdrav svima.
Prijavi uredniku   Sačuvana
Stranice: 1 [2] 3   Idi gore
  Štampaj  
 
Prebaci se na: