named pipes - komunikacja między C++ a innym językiem

0

Cześć!
Mam prośbę do bardziej obeznanych w temacie: czy mógłby mi ktoś wyjaśnić łopatologicznie o co chodzi z tzw. "named pipes"? Chcę pisać w jednym języku (C++) i jednocześnie korzystać z aplikacji napisanej w innym języku. Przeczytałem, że jednym z rozwiązań jest właśnie użycie named pipes, ale nigdzie nie mogę znaleźć jakiegoś wartościowego artykułu o tym mechanizmie w języku polskim. Czy mógłby mi ktoś pomóc i wyjaśnić w skrócie lub odesłać do jakiegoś wyczerpującego tekstu?
Z góry dziękuję za pomoc!

0

Chcę pisać w jednym języku (C++) i jednocześnie korzystać z aplikacji napisanej w innym języku.

Zanim się rzucisz na named pipes które są trochę upierdliwe, wyjaśnij może na czym ma polegać to „jednoczesne korzystanie”.
Bo może będzie lepsze rozwiązanie, np. zwykłe wywołanie DLL-ki.

0

A więc tak: od dłuższego czasu bawię się w pisanie różnych systemów transakcyjnych na rynku finansowym forex w języku MQL4 (język podobny do C). Język ten jest wbudowany w platformę MetaTrader (MT) i jest bardzo ubogi i często kłopotliwy, dlatego też postanowiłem tworzyć systemy w bardziej zaawansowanych środowisku i języku, którym jest MV C++.
Ogólna koncepcja jest taka, by napisać jakąś prostą aplikację w MQL, która będzie przesyłać potrzebne mi dane z platformy MT do innej aplikacji napisanej w C++ a która będzie wykonywać na niej jakieś opearcje i zwracać wynik z powrotem do MT przez MQL.
Chodzi tu o dwojaki dostęp do danych:

  1. By mieć dostęp do danych, do których mam dostęp z poziomu MQL (czyli tego wbudowanego języka) - łącznie lub przede wszystkim z danymi historycznymi.
  2. By ściągać na bieżąco nowe dane (cena instrumentów zmienia się co kilka sekund/minut i chciałbym, by mój program w C++ je na bieżąco otrzymywał).
0

Potoki nazwane są opisane na necie, nie ma sensu kopiować tutaj treści czy wyników wyszukiwania z Google.

W skrócie, jeśli jesteś na jakimś Uniksie/ Linuksie/ czymkolwiek zgodnym z POSIX to:

  • utwórz potok nazwany za pomocą programu mkfifo - potok nazwany będzie widoczny praktycznie jak zwykły plik,
  • niech jeden program otworzy ten potok do zapisu, a drugi do odczytu,
  • od teraz ten czytający powinien oczekiwać na dane od tego zapisującego i je sczytywać,
  • żeby mieć komunikację także w drugą stronę, musisz stworzyć dwa potoki nazwane,
0
Wibowit napisał(a):

Potoki nazwane są opisane na necie, nie ma sensu kopiować tutaj treści czy wyników wyszukiwania z Google.

Właśnie problem jest taki, że po wpisaniu hasła named pipe w google jakoś nic wartościowego mi nie znalazło :(

Wibowit napisał(a):

W skrócie, jeśli jesteś na jakimś Uniksie/ Linuksie/ czymkolwiek zgodnym z POSIX to:

A jak ma się do tego Windows XP i/lub windows 7? :) - nie znam się na tym :(

Z góry wielkie dziękuję za pomoc! :)

0

Potoki nazwane w Windowsie są chyba zupełnie niekompatybilne z tymi POSIXowymi. Na jakim systemie chodzi ta platforma MetaTrader?

0

Platforma MetaTrader jest zainstalowana lokalnie - na tym samym komputerze co ma działać aplikacja w C++ - czyli w windowsie.
Za pomocą tej platformy użytkownik łączy się z brokerem (firmą, która jest tak jakby pośrednikiem :)) - tj. pobiera i wysyła dane do serwera brokera.

0

W WinAPI jest funkcja CreateNamedPipe. Zapewne dostarcza funkcjonalności której potrzebujesz - o ile oczywiście w tym języku MQL możesz korzystać z WinAPI.

0

Chłopaki! Wybaczcie, że się wcześniej nie wysiliłem i nie podałem z jakiego systemu operacyjnego korzystam - nie byłem świadom, że jest to informacja istotna a poza tym zbyt duża ilość treści zniechęca was, bardziej doświadczone osoby, do jej czytania :).
Dlatego prosiłbym już zostawić ten aspekt problemu :P a skoncentrować się na kontynuacji merytorycznych kwestii :)

Czy w związku z powyższym może mi ktoś wyjaśnić co oznacza, że "Potoki nazwane w Windowsie są chyba zupełnie niekompatybilne z tymi POSIXowymi"? Czego mogę się w takiej sytuacji obawiać? Jakie niebezpieczeństwa są z tym związane?
Czy jeśli platforma jest zainstalowana lokalnie - na tym samej maszynie (komputerze) co ta druga aplikacja i działają na tym samym systemie operacyjnym to czy będzie to miało jakieś znaczenie?
Czy może lepiej szukać innego rozwiązania na komunikację między aplikacjami? - jeśli tak to co byście zaproponowali?

Z góry dziękuję i pozdrawiam!

0

A czy ten język do metatradera w ogóle obsluguje potoki? Albo sockety?

0

Dziękuję Ci za aktywność Wibowit!
Tak, w MQL chyba można korzystać z WinApi.
Zaraz przestudiuję co to za funkcja :).
pozdrawiam!

0

@Shalom, w MQL można importować sobie dll-ki

0

No to jak możesz korzystać z DLL-ki to nie musisz używać potoków, tylko możesz użyć np callbacki, wątki, itp

0

WinApi dopiero się uczę - dlatego pytam was :)
A możesz tak w skrócie napisać czym się charakteryzują poszczególne rozwiązania - jaką mają przewagę na potokami i między sobą?
Będę ogromnie wdzięczny!

0

Widzę, że niestety temat umarł :(
Czy może mi ktoś chociaż podpowiedzieć czy jeśli platforma jest na tym samym komputerze co inna aplikacja i używany jest system Windows to czy wówczas ma jakieś znaczenie, że "Potoki nazwane w Windowsie są chyba zupełnie niekompatybilne z tymi POSIXowymi"?
Czy może ten fakt będzie miał jedynie znaczenie, gdy będą dwa różne systemy operacyjne?
z góry dziękuję za pomoc!

0

Jeśli po obydwu stronach masz WinAPI, albo po obydwu stronach masz POSIXa to nie ma problemu. No ale skoro możesz ładować DLL-ki to ich ładowanie byłoby raczej najwygodniejsze i najwydajniejsze.

0
Wibowit napisał(a):

Jeśli po obydwu stronach masz WinAPI, albo po obydwu stronach masz POSIXa to nie ma problemu. No ale skoro możesz ładować DLL-ki to ich ładowanie byłoby raczej najwygodniejsze i najwydajniejsze.

Ale chodzi Ci, by zamiast w całości przejść na C++ i łączyć się z inną aplikacją, która łączy się z platformą to pisać tylko w C++ dll-ki i ładować je do MQL-a i tam używać, czy chodzi Ci o wykorzystanie jakiejś konkretnej dll-ki do komunikowania się między programami?

0

Chodzi mi o wpakowanie logiki do DLL-ki i podłączenie jej do tego MetaTradera, czyli to pierwsze.

0

Ok! Dziękuję Ci bardzo za pomoc!
pozdrawiam!

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