Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

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

annonymous

  • Gość
[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: 1177
    • 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/

annonymous

  • Gość
[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: 1177
    • 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.

annonymous

  • Gość
[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: 2765
  • 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: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
[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
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

snajper_8383

  • Gość
[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++.

annonymous

  • Gość
[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

annonymous

  • Gość
[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: 2765
  • 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.

annonymous

  • Gość
[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

Offline abramovgerman

  • Nowy na forum
  • *
  • Wiadomości: 1
    • Zobacz profil
Odp: [C] Uruchamianie zewnętrznych programów
« Odpowiedź #12 dnia: 2023-10-30, 13:37:42 »
Odpowiedź zostawiam TYLO dlatego, ze ma jakiś związek z tematyką forum. A autorowi: po 10 latach problem najprawdopodobniej został już rozwiązany. Ostatni post jest z początku listopada 2013... Jeżęli chcecie się reklamować, właściciel forum prawdopodobnie chętnie odpowie na wszystkie pytania.

Zauważyłem, że szukasz informacji na temat uruchamiania zewnętrznych programów w Linuxie. Sam przeszedłem podobną drogę, przechodząc z Windowsa na Linuxa, i początkowo było to wyzwanie. Właśnie dlatego zdecydowałem się na kurs w GoIT hxxs://goit.global/pl/reviews/ [link specjalnie unieaktywniony przeciw SEO - moderator], który pomógł mi zrozumieć bardziej skomplikowane aspekty programowania, w tym działanie w systemie Linux. To nie tylko o otwieraniu zewnętrznych programów, ale o całej filozofii pracy w środowisku open source i bardziej technicznym podejściu do informatyki. Zamiast szukać gotowych rozwiązań, może warto zainwestować trochę czasu w nauczenie się, jak tworzyć własne, bardziej zaawansowane programy? W GoIT uczą od podstaw, aż po bardziej złożone zagadnienia - idealnie dla kogoś, kto chce poszerzyć swoje horyzonty w IT. Sprawdź, może to będzie dla Ciebie ciekawe!

« Ostatnia zmiana: 2023-10-30, 15:16:53 wysłana przez Paweł Kraszewski »

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 111
    • Zobacz profil
Odp: [C] Uruchamianie zewnętrznych programów
« Odpowiedź #13 dnia: 2024-02-11, 13:48:18 »
Może odpisuję już jakiś czas temu, ale ten wątek nie został skasowany, m.in dla potomnych, więc dopiszę swoje.

Windows i Linux nie obsługują tych samych plików wykonywalnych, zarówno skryptowych, jak i binarnych. Tak jest domyślnie. Można napisać, że zawsze możesz nakazać użytkownikowi zainstalować WSL lub Wine, albo basha/python-a/perl-a pod Windows, ale czy to ma sens. Dalej rozwinę myśl, bo może to podsunie rozwiązanie: możesz pisać program w jakimś języku skryptowym i redystrybuować skrypty wraz z interpreterem, a na stronie wykrywać OS i podsuwać odpowiednią paczkę/instalator. Możesz również pisać pod Windows, i dystrybuować wersję Linuksową wraz z Wine (patrz: TeamViewer).

Natomiast, to polecam C++/Qt, i kompilację pod Windowsa i Linuksa. Do dystrybucji na Linuksa, to możesz skorzystać z Flatpaka. Flatpak ma mieć w przyszłości możliwość zarabiania na sprzedaży licencji lub dotacjach. Plik manifest dla Flatpaka nie jest dosyć skomplikowany. Sam opublikowałem jeden program na Flathub na gałęzi beta i zwykłej. Wcześniej wydawałem bundle dla innego programu. Jeżeli już się zdecydujesz na Qt/C++ i Flatpak, to nie zapomnij o runtime KDE.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: [C] Uruchamianie zewnętrznych programów
« Odpowiedź #14 dnia: 2024-02-11, 19:20:33 »
Proszę nie podsuwać pomysłów z Flatpakiem czy podobnymi pomiotami szatana. Zamyka to drogę dla użytkowników systemów innych niż Linux a będących poza tym całkiem znośnie kompatybilnych (np FreeBSD).
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy