abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 1
včera 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 6
včera 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 1
včera 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
včera 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
1.12. 15:16 | Komunita

Na GOG.com začal zimní výprodej. Řada zlevněných her běží oficiálně také na Linuxu. Hru Neverwinter Nights Diamond lze dva dny získat zdarma. Hra dle stránek GOG.com na Linuxu neběží. Pomocí návodu ji lze ale rozběhnout také na Linuxu [Gaming On Linux].

Ladislav Hagara | Komentářů: 1
1.12. 13:14 | Bezpečnostní upozornění

Byla vydána verze 2.7.1 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Řešeno je několik bezpečnostních problémů. Aktualizován byl především Tor Browser na verzi 6.0.7. Tor Browser je postaven na Firefoxu ESR (Extended Support Release) a právě ve Firefoxu byla nalezena a opravena vážná bezpečnostní chyba MFSA 2016-92 (CVE-2016-9079, Firefox SVG Animation

… více »
Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 760 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: C posielanie argumentov cez argv aj stdin

29.1.2010 23:13 mato
C posielanie argumentov cez argv aj stdin
Přečteno: 529×
cafte,
mam program, ktoremu posielam argumenty cez argv, teda:
int main(int argc, char** argv)
{
   // spracovanie argv
}
program spustam:
#./program argv1 argv2 
vsetko funguje ako ma
problem nastane, ked chcem spustit program tak, ze argument poslem ako vstup cez pipe-u:
# echo "argv1 argv2" | ./program 
kde sa snazim logiku toho spravit ako:
int main(int argc, char** argv)
{
   if (argc < 2)
   {
      char buf[1025];       
      if (!feof(stdin)) 
      {
           fgets(buff, 1024, stdin);
           // spracovanie buffera
      }
      else
      {
            /// print usage && exit
      }
   }
   ...
tak nastane problem, pretoze ak nezadam ziaden parameter (teda pustim program ako ./program) - tak caka na vstup z klavesnice .. moj ciel je, aby ked sa na stdin nic nenachadza (teda ze som ho nespustil pomocou 'echo'), tak program skonci ..

pls, vedel by ma niekto usmernit ? vdaka


Řešení dotazu:


Odpovědi

Luboš Doležel (Doli) avatar 29.1.2010 23:22 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
moj ciel je, aby ked sa na stdin nic nenachadza (teda ze som ho nespustil pomocou 'echo'), tak program skonci ..
Že to čeká na vstup, to je správné chování. Možností je leda na klávesnici stisknout ^D nebo použít </dev/null
29.1.2010 23:30 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin

Problém je v představě, že když progam spustíte "jen tak", tak se na vstupu nic nenachází. Ve skutečnosti program dostane na standardní vstup to, co mu napíšete na terminál; a vy mu to tam můžete napsat třeba po půl hodině, proto čeká. Pokud ho chcete spustit opravdu s prázdným vstupem, musel byste použít např.

  echo -n | ./program
  ./program </dev/null

nebo něco podobného. Tomu, co si představujete, by se částečně blížilo, pokud by se program na začátku podíval, jestli je standardní vstup terminálem (pomocí isatty()), a pokud ano, nečetl by ho. Ale nemyslím si, že tohle je správný způsob, jak psát programy.

29.1.2010 23:53 mato
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
ano - v tom je problem, read bude cakat, kym sa tam skutocne nieco neobjavi ..

druhy variant je, ze program bude citat data bud zo stdin alebo file-u, ak ho specifukujem .. vtedy dosiahnem asi najlepsie to, co potrebujem, teda bud:

# echo "data" | ./program 
alebo
#./program -f data.dat
chcel som sa vsak spytat ci predsalen neexistuje (cisty/prenositelny) sposob, ako som povodne zmyslal .. zda sa, ze tato druha varianta je asi typickejsia ..
30.1.2010 00:08 dark
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
Proč to hrotit, udělej si třeba parametr --stdin, kterým specifikuješ, že data předáváš přes stdin, parametr -f můžeš zachovat a když žádné parametry nejsou, tak uděláš tu výchozí akci (asi vypsat možnosti?)
30.1.2010 00:19 l4m4
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
Nebo prostě spouštěj program
echo arg arg | xargs program
pokud to tedy není nějaká domácí úloha...
30.1.2010 00:37 mato
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
:) nie je to ziadna domaca uloha

ked to pre tento priklad zjednodusim, nech program robi to, ze na vstupe nacita hexa cisla a prehodi ich na desiatkove .. v praxi cita data zo suboru, pre urcite pripady chcem rucne zadavat slova ja (moja spatna kontrola) .. preto som si urobil moznost rucne zadat cisla cez

#./program a1 7f .. 
no a zamyslel som sa, ze co keby som to chcel robit sposobom
# echo "asd" | ./program
a zistil som, ze to neviem vyriesit/dogooglit sa .. preto som sa pytal - v tom spociva moj root cause otazky .. a na to si mi v celku odpovedal - pouzi xargs ..
30.1.2010 15:30 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
Veľa programov niečo takéto rieši tak, že sa parameter dá - a program vie, že má čítať dáta zo štandardného vstupu.
30.1.2010 21:23 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
To se ale typicky používá tam, kde je parametrem soubor, ze kterého se má vstup číst.
30.1.2010 22:41 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
Podľa popisu ten jeho súbor pracuje aj so súbormi (takže upraviť to by asi nebolo až tak zložité).
30.1.2010 22:52 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin

Upravit ano, ale pomlčková konvence standardně funguje tak, že je ekvivalentní

  cmd file
  cmd - <file

zatímco v tomto případě by mělo být ekvivalentní

  cmd xyz
  echo xyz | cmd -

což by IMHO bylo dost matoucí pro ty, kdo jsou zvyklí na používání pomlčky v tom tradičním významu.

30.1.2010 01:10 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
chcel som sa vsak spytat ci predsalen neexistuje (cisty/prenositelny) sposob, ako som povodne zmyslal .. zda sa, ze tato druha varianta je asi typickejsia ..

Ale na to už jsem vám odpověděl - pokud vám nevadí, že nebudete moci zadat parametry interaktivně z terminálu, můžete použít isatty() pro rozlišení, jestli je standardní vstup terminálem.

30.1.2010 01:33 mato
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
skusal som na rychlo:
int main(int argc, char** argv)
{
        if (isatty(1))
                printf ("is terminal.\n");
        else
                printf ("not a terminal.\n");
..
mi spusteny kod:
#./program a1
is terminal.
#

# echo "ea" | ./program
is terminal.
#
je mozne, ze ta nechapem presne ako to mam pouzit .. pozrem este po googli examples na isatty(), rano budem (hadam) mudrejsi ..
30.1.2010 02:31 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
Deskriptor číslo 1 je standardní výstup, standardní vstup má číslo 0. Čistší je místo čísla použít STDIN_FILENO, pak se nespletete.
30.1.2010 10:42 mato
Rozbalit Rozbalit vše Re: C posielanie argumentov cez argv aj stdin
ach, toto mi vcera do hlavy neudrelo
je presne ono - takto by sa to teda dalo osetrit. ako som spominal, toto je uz viac moja zvedavost, necham to pravdepodobne na citanie z fileu a cez stdin .. je fajn ale vediet, ze existuje aj takyto sposob.

dakujem za radu.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.