Portál AbcLinuxu, 16. července 2025 07:54


Dotaz: C++ a source

8.6.2011 10:38 ubka7617
C++ a source
Přečteno: 348×
Odpovědět | Admin

Ahojte skusal som pustat skript cez prikaz source.

V skripte je iba TEST=1500.

Po skonceni mi echo $TEST vypise hodnotu premennej test.

Skusal som ale nacitat tuto premennu do c++ programu a tam mi vyhodi ze je prazdna.

c program:

char * TEST;

system(" /bin/bash -c \"source /home/test.sh\"");

TEST = getenv("TEST");
if (TEST == NULL) {
cout << "Premenna TEST nema ziadnu hodnotu" << endl;
}

else{
cout << "Hodnota premennej je : " << TEST << endl;
}

 

Kde robim chybu ked mi nenacita danu premmennu aj ked ju v bashi pozna  ?

Dakujem

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.6.2011 10:54 Kit
Rozbalit Rozbalit vše Re: C++ a source
Odpovědět | | Sbalit | Link | Blokovat | Admin
Proměnná TEST platí pouze pro proces /bin/bash, zpět do rodiče (tvého programu) se její obsah nepřenáší, s ukončením shellu její hodnota zaniká.
8.6.2011 10:57 ubka7617
Rozbalit Rozbalit vše Re: C++ a source
a je mozne tu premennu nacitat bez toho aby tam bolo export test=1500 do c programu ?
8.6.2011 11:07 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: C++ a source
A proč ji nepředat jako parametr?
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
8.6.2011 11:54 ubka7617
Rozbalit Rozbalit vše Re: C++ a source
lebo v tom skripte sa budu generovat hodnoty parametrov, bude ich viac
8.6.2011 12:40 kuka
Rozbalit Rozbalit vše Re: C++ a source
Ze si program v C spousti bash, ktery spusti skript a tim preda zpet programu nejake parametry formou env promennych, by bylo dost ujete, i kdyby to technicky fungovalo. Mozna kdyz nastinis, co vlastne resis za problem, tak ti nekdo navrhne "obvykle" reseni.
8.6.2011 13:24 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: C++ a source
a co použít popen a výsledek vytisknout a výstup pak rozparsovat
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] )
{

  FILE *fp;
  int status;
  char buff[1035];

  fp = popen("/bin/bash -c 'TEST=1500;echo $TEST'", "r");
  if (fp == NULL) {
    printf("Failed to run command\n" );
    exit;
  }

  while (fgets(buff, sizeof(buff)-1, fp) != NULL) {
    printf("%s", buff);
  }

  pclose(fp);

  return 0;
}

nejsem zrovna céčkař, ale mohlo by to jako nakopnutí stačit
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
8.6.2011 12:09 m
Rozbalit Rozbalit vše Re: C++ a source
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, tak to zkus takhle.

system(" /bin/bash -c \". /home/test.sh\"");

Sam jsem zvedavej jestli to pomuze.
8.6.2011 12:36 kuka
Rozbalit Rozbalit vše Re: C++ a source
ne nepomuze, jak uz bylo vysvetleno vyse, podproces nemuze nastavit environment svemu rodici
8.6.2011 14:10 ubka7617
Rozbalit Rozbalit vše Re: C++ a source

je mozne aby sa z toho bash scriptu dala vyvolat aj funkcia, ktora je definovana v c++ ?

napr. na vypis chabovej hlasky a ukoncenie programu, a v pripade ze na konci bude return 0; v tom skripte tak cely krrk bude povazovani za spravny a bude program pokracovat dalej  ?

8.6.2011 14:51 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: C++ a source
Obávám se, že bude potřeba, abyste si nejdřív něco nastudoval o tom, co se vlastně děje (a) při spuštění shellového skriptu, (b) při kompilaci a linkování programu napsaného v C a spuštění výsledného nativního spustitelného souboru. Pak teprve pochopíte, proč jsou otázky, které pokládáte, úplně absurdní.
8.6.2011 15:15 Kit
Rozbalit Rozbalit vše Re: C++ a source
Je poměrně obvyklé napsat hlavní program jako skript, ze kterého volám dílčí programy napsané v nějakém kompilovaném jazyce, třeba v C++. Takovému procesu se předává konfigurace poměrně snadno, např. přes kolonu nebo parametr. Obráceně to jde sice také, ale moc rozumné to není.
8.6.2011 15:54 ubka7617
Rozbalit Rozbalit vše Re: C++ a source

co sa tyka mojich otazok - len sa ucim c++

mam podobny program ktory vie take veci je robeni v c++ ale zial nie su k nemu zdrojaky

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.