Palautetta komentoriviltä ohjelmaan ?

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
4168
Äänestä

Muut lukivat myös

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.

Äänestä

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).

Äänestä
  • 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.

    Äänestä

Kommentoi aloitusta


slowhand kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu