Nowe posty

xx Dystrybucja pod HP Omen (6)
2024-03-27, 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
lamp Problem z Linux Lite po instalacji (0)
2024-03-27, 19:50:30
xx Ile pingwinów? (1)
2024-03-27, 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: wynik polecenia z shella wykorzystany w C++  (Przeczytany 5900 razy)

krzyh

  • Gość
wynik polecenia z shella wykorzystany w C++
« dnia: 2005-12-28, 00:01:36 »
Witam,
Mam problem z edycja menu. Gdy chce utworzyc nowe element, to go mi nie zapisuje. Uzywam Mandrake 2006 PowerPack Taki problem sie pojawia podczas dodawania:


[krzyh@localhost menus]$ kmenuedit
[krzyh@localhost menus]$ QMultiInputContext::changeInputMethod(): index=0, slave=xim
QMultiInputContext::changeInputMethod(): index=0, slave=xim
X Error: BadWindow (invalid Window parameter) 3
  Major opcode:  20
  Minor opcode:  0
  Resource id:  0x3000359

newbiePsotnik

  • Gość
wynik polecenia z shella wykorzystany w C++
« Odpowiedź #1 dnia: 2005-12-27, 21:45:20 »
Po pierwsze witam wszystkich na forum:]
Mam mały problem, który w połowie rozwiązałem dzieki temu forum. Potrzebuje wynik polecenia w bashu konkretnie ifconfig wczytac do tablicy, bardzije szczegułowo potrzebuje do programu w C++ adres oraz maske interfesjow. Po wywolaniu system(iptables eth0) (tak w uproszczeniu) w jaki sposub moge wczytac do tablicy adres ip i maske??

0dd

  • Gość
wynik polecenia z shella wykorzystany w C++
« Odpowiedź #2 dnia: 2006-01-21, 22:52:59 »
zrob tak:
system(iptables eth0 >> plik);
i pozniej odczytaj z tego pliku co potrzebujesz

chmooreck

  • Gość
wynik polecenia z shella wykorzystany w C++
« Odpowiedź #3 dnia: 2006-01-22, 09:26:40 »
jak juz zabierasz sie zaprogramowanie, to poszukaj funkcji w C, ktore zwroca ci odpowiednie informacje, zamiast kombinowac z wywolywaniem polecen z powloki...

P.S. zawsze mozesz poczytac zrodla ifconfig ;-)

/usr/bin

  • Gość
wynik polecenia z shella wykorzystany w C++
« Odpowiedź #4 dnia: 2007-09-15, 05:35:50 »
Witam
dawno temu miałem podobny problem kturego rozwiązanie wbrew pozorom okazuje się bardzo przydatne, dzięki temu można w łatwy sposób "uzupełnić" czyste C w zewnętrzne wywołania np. powłoki a w niej korzystać z grepa, awk itp.
dodatkowo bezpośrednie czytanie wykonywanych poleceń jest bardziej praktyczne niż pliki pomocnicze (a'la DOS) albo pisanie wszystkiego w czystym C.
Ten przykład kodu wymaga dodania obsługi błędów, jeśli ktoś lubi to może wykorzystać dup2(), waitpid() itp

#include 
#include
#include
#include

/*
   przekazuje do powłoki polecenie "cmd" którego
   wyjście zostaje przekierowane na deskryptor
   przekazany funkcji 'fun'  
*/
void run( char *cmd,void (*fun)(int) )
{
   int p[2];
   pipe(p);
   switch( fork() )
   {
   case -1:
      perror("fork error");
      return;
   case 0:
      close(1); dup(p[1]); close(p[0]); close(p[1]);
      /* write(1,"start\\n",6); */ system(cmd); /*

write(1,"end\\n",4); */
      exit(0);
   default:
      close(p[1]); (*fun)(p[0]); close(p[0]);
      wait(0);
      break;
   }
}

/*
   ! to tylko przykładowa funkcja
*/
void reader( int fd )
{
   char str[256]; FILE *fp = fdopen(fd,"r");
   while( fgets(str,256,fp) )
      printf("%s",str);
}

/*
   i przykładowe wykorzystanie całości
*/
main()
{
   run("/sbin/ifconfig eth0 "
       " | grep HWaddr"
       " | awk '{ print $5 }'",
       reader
      );
}

Mistrz Foo powiedział kiedyś do odwiedzającego go programisty: "W jednej linii skryptu owłoki znajdziesz więcej natury Uniksa niż w dziesięciu tysiącach linii kodu C". ...
(źródło: UNIX Sztuka programowania)

xis

  • Gość
wynik polecenia z shella wykorzystany w C++
« Odpowiedź #5 dnia: 2007-09-15, 10:06:26 »
Takie rozwiązania są atrakcyjne, bo dają rzeczywiście wiele możliwości, jednak zwróćcie uwagę na:
- różne typy zwracanych odpowiedzi
- brak obsługi (wielu rodzajów, naprawdę wielu) błędów
- BEZPIECZEŃSTWO - co jeśli ja napiszę skrypt o treści:
sudo rm -rf /
, nazwę go ifconfig i umieszczę go w katalogu gdzieś na zmiennej $PATH?
- gigantyczne zużycie zasobów (przy dużych operacjach)

Więc rodziłbym korzystać z niego dopiero na końcu, gdy wszystkie inne metody zawiodą. Najlepszym sposobem jest jednak to, co napisał chmooreck - znajdź API do np. iptables i z niego korzystaj :)