C++/Qt jak odebrać wartość którą zwróciła funkcja main w innym programie

1

Wątek na razie zakładam bardziej z ciekawości aby dowiedzieć się następującej rzeczy.

Rozważmy taki program

int main(int dane)
{

//tutaj coś się dzieje ale po zrobieniu tego funkcja coś zwraca

return 0; // <- to jest najważniejsze w tym wątku
}

funkcja main zwraca zero tj. program wykonał się bez błędów (o ile nie zawarłem tam innych zwrotów które sygnalizowałyby mi błąd)

teraz mam inny program który na podstawie zwróconej wartości przez pierwszy program "podejmie decyzję" o uruchomieniu się.

Pytanie jest takie - jak odebrać wartość zwróconą przez funkcję "main" w innym programie ?

Może przejdę do bardziej praktycznego zadania.

Mam program który oblicza sumę sha512 i po obliczeniu tej sumy przez ten program, chciałbym tą sumę kontrolną odebrać w swoim programie - jak to zrobić ?

I nie wiem czy nie mieszam obu zagadnień.

0

Jeśli nic nie doszło w nowych standardach (a mogło — nie potrzebowałem tego, więc nie wiem), to nie ma ogólnej C++-owej metody na to, są zależne od systemu.

1

boost::child

4
  1. Odpowiadając na Twoje pytanie -- ten return w mainie to kod zakończenia programu (procesu), zwany czasem kodem błędu. Jest to mała liczba całkowita, więc (jak już skomentował @enedil) sha się nie zmieści. Ale gdybyś chciał tego użyć w innym zastosowaniu, to i tak nie za bardzo radzę. Ogólnie, środowisko uruchomieniowe może traktować zwrócenie nie-zera jako jakiegoś niepowodzenia i zachować się nie tak, jak sobie życzysz... (Stąd "kod błędu".) Ale kod ten oczywiście odebrać można w innym programie, na przykład tym, co @_13th_Dragon zaproponował.

  2. Żeby wydać na zewnątrz z programu coś dla innego programu (jak sha u Ciebie), należy po prostu wydać to na standardowe wyjście (printf, cout itp.), no i połączyć Twój program potokiem (pipe) z odbiorcą -- który powinien wczytać wtedy dane ze standardowego wejścia (scanf, cin itp.).

0

To co @_13th_Dragon napisał, albo np.
https://doc.qt.io/qt-5/qprocess.html
Tyle tylko, że dobiera się język pod zadanie. Do przetwarzania outputu z innego programu o wiele lepiej nada się TCL/Expect, Python (z biblioteką pexpect) albo inny Perl. W C czy C++ można, oczywiście. Ale zabij mnie, nie wiem po co :p

1

teraz mam inny program który na podstawie zwróconej wartości przez pierwszy program "podejmie decyzję" o uruchomieniu się.

Pytanie które się nasuwa jest proste. Po co? Jeśli jeden program czeka na wynik obliczeń drugiego to.... wystarczy jeden proces to nie ma sensu. Jeśli ten proces czeka na wynik + robi coś jeszcze z boku to.... lepiej użyć wątku w tym wypadku. Chyba że sam proces który wykonuje obliczenia będzie wykorzystywał wiele wątków to jako taki sens by to miało.

1
revcorey napisał(a):

teraz mam inny program który na podstawie zwróconej wartości przez pierwszy program "podejmie decyzję" o uruchomieniu się.

Pytanie które się nasuwa jest proste. Po co? Jeśli jeden program czeka na wynik obliczeń drugiego to.... wystarczy jeden proces to nie ma sensu. Jeśli ten proces czeka na wynik + robi coś jeszcze z boku to.... lepiej użyć wątku w tym wypadku. Chyba że sam proces który wykonuje obliczenia będzie wykorzystywał wiele wątków to jako taki sens by to miało.

No nie całkiem. Przecież narzędzia w systemach operacyjnych mniej więcej tak działają -- potok zestawia powłoka (symbolem |) i uruchamia kilka niezależnych od siebie programów, z których każdy bierze wyniki od poprzedniego i tak dalej... Nie zawsze można i nie zawsze jest sens pisać wszystko samemu od zera w jednym programie -- często lepiej użyć narzędzi gotowych, które tak właśnie działają -- takie małe programy unixowe to np. grep tr less sort cut uniq head tail cat wc sed i wiele innych...

1 użytkowników online, w tym zalogowanych: 0, gości: 1