Ongelmani on seuraavanlainen, olen tehnyt C-kielellä ohjelman (2000 riviä, LInux tai cygwin -spesifiä), ja yhdessä funktiossa haluaisin tarkistaa onko NN käyttäjällä tietty ohjelma XX käynnissä.
Lisäksi pitää tietää missä hakemistossa c-kielisä exe tiedostoa ajetaan.
Eli pitäisi ajaa komentorivillä komennot
1. ps |grep netscape|wc -l
2. ´pwd´
ja saada näitten palaute takaisin ohjelmaan.
Nyt tein sen system(cmd) komennolla, ja kirjoitin tilapäistiedostoon /tmp hakemistoon.
Mutta onko mitään tapaa saada helpommin suoraan 'paluuarvoja' komentoriviltä ? system kun palautta vain 0 jos onnistui, ja envp[] muuttujassa on vain ymp.muuttujat.
Kaikki apu kelpaisi ...
terv. slow
Lisäksi pitää tietää missä hakemistossa c-kielisä exe tiedostoa ajetaan.
Eli pitäisi ajaa komentorivillä komennot
1. ps |grep netscape|wc -l
2. ´pwd´
ja saada näitten palaute takaisin ohjelmaan.
Nyt tein sen system(cmd) komennolla, ja kirjoitin tilapäistiedostoon /tmp hakemistoon.
Mutta onko mitään tapaa saada helpommin suoraan 'paluuarvoja' komentoriviltä ? system kun palautta vain 0 jos onnistui, ja envp[] muuttujassa on vain ymp.muuttujat.
Kaikki apu kelpaisi ...
terv. slow
Vastaukset 4
Vanhimmat
stdout väliaikaisesti vaikka johonkin streamiin, mitä voi lukea c-ohjelmasta. Sitten ajat system komennolla noita komentoja ja luet stremistä vastaukset. Eli ohjaat ikäänkuin näytölle tulostamisen omaan streamiin, mitä luet.
eli kato vaikka toi
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_freopen.2c_._wfreopen.asp
eli käytät freopenia jola avaat uudestaan stdoutin omaan filepointteriin ja luet sitä niinku tavallista fileä.
Miksi pitää saada palautetta komentoriviltä? Turhan monimutkaista kikkailua.
exen hakemiston saa main-funktion argumentista argv[0], ja eiköhän sen prosessin tiedotkin saa suoraan jollain funktiolla ( en vaan tiedä mikä se on Linuxissa, tiedän vain NT-VisualC-spesifisen).
Hei vaan. En pääse käsiksi tuohon argv[0] parametriin, taikka ylipäätän koko main funktio ei ole käytössäni, (käytän sellaista alustahommaa).
Juuri tuota 'helppoa funktiota' kaipailin, jos joku olisi lonkalta muistanut, sellaista ei vaan taida välttämättä olla.
Saan homman tehtyä kyllä tällain komentorivin kautta (ts. system() käskyllä ikään kuin ajetaan jotain komentorivillä ja otetaan talteen tiedostoon, jota sitten luetaan. Sieltäkin pitää viellä parsia stringejä ja int-lukuja). Homma tosiaan on vähän turhan konstikas näin helpon asian selvittämiseen...
ohjelma oli PSEUDONA tälainen:
if (netscape käynnissä)
netscape -remote "openURL(´pwd'/tiedosto.html)"
else
netscape ´pwd´/tiedosto.html
jolloin jälkimmäinen else starttaa uuden Netscaapelin, jollei sitä ole käynnissä.
Voi olla että kävin hyttysen kimpuun vähän turhan järeällä C-aseella, ja rivejä tuli hävyttömän paljon ... no se on nyt jokseenkin pulkassa. Vähän viimeistelen vielä. Kiitti vinkeistä kaikille. Pirulla oli hyvä temppu, käytän sitä joskus varmaan johonkin juttuun vielä jatkossa.