Nowe posty

Autor Wątek: [C] Uruchamianie zewnętrznych programów  (Przeczytany 10467 razy)

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 6
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« dnia: 2013-11-01, 11:04:04 »
Witam
pisałem już wiele programów/skryptów na windowsie, lecz w linuxie tylko te najprostsze

W tym temacie chciałbym się dowiedzieć jak uruchomić zewnętrzny program, czy byście mogli mi wrzucić jakiś gotowiec?

a druga sprawa to czy byście mogli dać mi jakiegoś linka/polecić jakąś dobrą stronę z różnicą bibliotek i kursem pisania na linuxie?

oraz trzecia rzecz, czy da się pisać tak programy by działały na obu systemach? czy łatwiej jest już pisać 2 oddzielne programy?

pisząc programy miałem namyśli jakieś łatwe i krótkie kawałki kodu :D

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1188
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #1 dnia: 2013-11-01, 12:59:26 »
W Linuksie skrypty można pisać w wielu językach skryptowych, ale najpopularniejszy jest Bash. W Google jest bardzo dużo na ten temat, wliczając w to kursy i poradniki.
Bash daje ogromne możliwości i nie ma nawet porównania z dosowymi/windowsowymi bat-ami dodanymi do systemu microsoftu chyba jako nieśmieszny żart.

Programy w C da się pisać przenośnie. Nawet te duże i z graficznym GUI, a w szczególności te małe. Musisz tylko używać przenośnych bibliotek, nie używać tych specyficznych dla danego systemu (np. conio.h), czasem dodać jakiś warunek kompilacji.

Uruchomienie zewnętrznego programu:
w Bashu: podajesz jego nazwę jeśli jest w PATH, a jeśli nie to ścieżkę względną lub bezwzględną:
git
./program2
../katalog2/program2
/usr/bin/git
w C/C++: używasz jednej z funkcji exec() lub ewentualnie system():
http://linux.die.net/man/3/exec
http://linux.die.net/man/3/system

Linki:
https://www.google.com/search?q=c+c%2B%2B+linux+kurs
https://www.google.com/search?q=bash+linux+kurs
i oczywiście manual Linuksa: http://linux.die.net/man/

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 6
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #2 dnia: 2013-11-01, 17:38:09 »
Thx wielkie
Tak oczywiście na co dzień używam basha jednak jeżeli się nie chce pokazywać kodu, lub chce się lepiej pisać programy to już trza wrócić do C

ok mówisz ze się da przenośnie pisać tylko trzeba używać przenośnych bibliotek, to znaczy co?
jak używam bibliotek właśnie conio.h czy windows.h lub innych to co mam zrobić w linuxie?
Byłbym wdzięczny za rozwinięcie tej myśli
wiem ze są odpowiedniki w linuxie lecz tamte biblioteki mają zupełnie inne funkcje, inaczej się nazywają i inaczej działają, wiec jak pisać przenośnie?

Chodzi mi tylko i wyłącznie o C ew. C++

Dzięki za odpowiedzi

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1188
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #3 dnia: 2013-11-01, 18:41:42 »
Skrypt Basha można skompilować do binarki, np. za pomocą shc:
http://www.datsi.fi.upm.es/~frosal/sources/shc.html

Na Linuksie zamiast conio.h można używać ncurses.
Ale jeśli to jest prosty kod, to nie wymaga w ogóle takich wynalazków i wręcz nie powinien ich używać. Programy powinny przyjmować prosty input i generować prosty output. Po to, by można było używać ich w skryptach i automatyzować pracę. Takie wynalazki jak ncurses psują całą tę koncepcję (conio.h nie ma czego psuć, bo w windows skrypty i tak praktycznie nie istnieją).

Po co Ci windows.h w prostych programach to nie wiem. Jeśli go używasz, to z samej nazwy tego pliku nagłówkowego pokazujesz, że nie chcesz pisać przenośnie tylko wiązać się z winapi.
Jeśli coś już koniecznie musi być nieprzenośnie i specyficzne dla platformy, to wydziel implementację do osobnych plików i dodaj warunki kompilacji, aby na każdej platformie używana była odpowiednia implementacja jakiejś funkcji/klasy.

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 6
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #4 dnia: 2013-11-01, 19:05:28 »
No właśnie się nie zrozumieliśmy, w C to ja pisałem na windowsie, a teraz zamierzam pisać także na linuxie, i ciężko mi się przerzucić bo wiele funkcji których używałem po protu nie ma lub działają inaczej

no dobra może nie koniecznie proste programy chce pisać ale chce je pisać w C

Na chwilę obecną faktycznie chyba wystarczy mi shc, zaraz sprawdzę jak działa w praktyce

przy okazji zapytam czy można zdeskompilować takowy plik binarny skompilowany poleceniem shc i tym samym odzyskać czysty kod?

natomiast wogóle chce pisać przenośne programy i dlatego zadaję właśnie pytania, nie wiem jak się do tego zabrać, bo teraz umiem napisać 2 różne programy używając różnych funkcji z różnych bibliotek

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2393
  • 1709
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #5 dnia: 2013-11-01, 19:36:25 »
@ultr
Cytuj
Jeśli coś już koniecznie musi być nieprzenośnie i specyficzne dla platformy, to wydziel implementację do osobnych plików i dodaj warunki kompilacji, aby na każdej platformie używana była odpowiednia implementacja jakiejś funkcji/klasy.
Mógłbym poprosić o jakieś przykłady z google?

@annonymous
Sam nie programuję, ale z tego co się oriętuję to najwięcej jest problemów jest z odwołaniami do systemu. Przykładowo GIMP korzysta GTK który został w jakiś sposób przeniesiony na windowsa, dzieki temu okienka można robić w gtk i będą działać na obu systemach.
http://pl.wikibooks.org/wiki/GTK%2B/Szkielet_programu_GTK%2B_w_j%C4%99zyku_C%2B%2B

Z wiki jeszcze wygrzebałem:
Cytuj
Simple DirectMedia Layer — biblioteka napisana w C, przeznaczona dla gier komputerowych i aplikacji multimedialnych. Udostępnia niezależne od platformy API, pozwalające kontrolować dźwięk, grafikę czy urządzenia wejścia wyjścia.
wxWidgets — biblioteka przeznaczona dla języka C++, udostępniająca jednolite, niezależne od systemu API do tworzenia GUI. Cechą biblioteki jest to, że na każdym systemie korzysta z natywnych elementów jego interfejsu.
Qt — biblioteka napisana w języku C++ pozwalająca tworzyć jednolite GUI niezależnie od platformy.
GTK+ — kolejna biblioteka umożliwiająca tworzenie aplikacji "okienkowych" napisana w C dostępna dla Linuksa, Microsoft Windowsa i eksperymentalnie dla Mac OS X.
Mono ominołem, bo wydaje mi się że muszą to jeszcze dopracować by idealnie działało (ale zerknąć możesz ).

Jedną z przenośnych gier (Linux - Windows ) jest Glest ( lub MegaGlest )
http://sourceforge.net/apps/trac/glestae/wiki/CompileGuide
- jego kod jest otwarty , więc możesz podejżeć jak zrobili.
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2613
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • keybase.io/pkraszewski
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #6 dnia: 2013-11-01, 21:30:14 »
Cytat: annonymous
natomiast wogóle chce pisać przenośne programy i dlatego zadaję właśnie pytania, nie wiem jak się do tego zabrać, bo teraz umiem napisać 2 różne programy używając różnych funkcji z różnych bibliotek
Ciągle nie wiemy jakiego typu programy piszesz. Więc precyzyjnych odpowiedzi nie będzie.

Moja propozycja przy braku precyzji to zainwestować czas w naukę Qt.  Jeżeli używane funkcje ograniczysz do Qt i biblioteki standardowej C/C++,  to ten sam kod źródłowy skompilujesz dla Windows, Linuksa,  BSD, MacOS -  a dla nowych wersji Qt5 dodatkowo dla Androida i eksperymentalnie dla IOSa. Już bardziej wieloplatformowo się nie da.
W Qt masz przenośne biblioteki do grafiki,  dźwięku, video, sieci, wielowątkowości, GUI,  baz danych,  XML. Masz nawet moduł przeglądarki WWW na webkicie.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline Kuba83

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 109
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #7 dnia: 2013-11-02, 10:47:01 »
Jak chcesz pisać tylko w C bez C++, to możesz też programować w GTK+. GTK+ daje możliwość programowania i na windowsie i linuksie, jak również możesz pisać w C lub C++ (gtkmm). Jeśli chodzi o Qt to tylko C++.

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 6
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #8 dnia: 2013-11-02, 10:53:57 »
Dzięki za odpowiedzi
Glest jakoś mi nie działa na windowsie 7, ale na tym systemie w ogóle wiele gier nie działa
pkraszewski thx teraz wiem gdzie szukać, no i w zasadzie teraz wiem jakich bibliotek używać

myślę ze na razie wasze wypowiedzi mi wystarczą teraz muszę sam je przetestować a  potem napiszę rezultaty i pewno kolejne pytania :D

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 6
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #9 dnia: 2013-11-05, 21:39:06 »
Witam
nie było mnie bo odcięli mi internet :/
mam problem jak to z linuxem bywa nie umiem zainstalować tego shc
ściągnąłem shc-3.8.9.tgz
rozpakowałem tarem
zrobiłem make i nie działa

czy byście mogli mi dokładnie opisać co po kolei zrobić by to zadziałało
make się udał jak zrobiłem łącze ln z shc-3.8.9.c do shc.c lecz nigdzie nie pisze żeby tak zrobić więc pewnie tego nie trzeba robić

instalowałem tylko z apt-get gdzie wszystko się robiło za mnie i wiedziałem ze się dobrze zrobi bo od dystrybucji raczej musi dobrze działać i być zgodne

czy rozumiem dobrze ze żeby dobrze działał skrypcik to potrzebuje?:
 - CC
 - CFLAGS
których też nie ma w standardowych paczkach debiana i też trzeba szukać i ręcznie wszystko montować?

jeśli tak to proszę też o opisanie instalacji środowiska by przeprowadzić dobrze instalacje shc

thx z góry

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2393
  • 1709
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #10 dnia: 2013-11-05, 22:27:50 »
jak z apt-get zainstalowałes i sie udało, to nie musisz drugi raz instalowac.
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 6
    • Zobacz profil
[C] Uruchamianie zewnętrznych programów
« Odpowiedź #11 dnia: 2013-11-05, 23:13:02 »
nie ma tego w apt-get
nie znajduję się to w paczkach debiana tylko na zewnętrznych serwerach więc właśnie proszę o informację jak zainstalować to ręcznie krok po kroku bo mi nie działa