Ich möchte ein Programm erstellen, das folgendes tuen soll:
1.der superuser erstellt einen Prozess, der auf "requests" von anderen Programmen wartet
2.ein user schickt einen request, worauf der superuser-Prozess antwortet
3.er antwortet indem er aus einer Datei den für den user relevanten teil zurücksendet.
So teil 1 und 2 ist ja nicht schwer,
1.Dazu wollte ich eine MessageQueue aus dem sysv_ipc packet verwenden,
also erstelle ich eine Queue, und sorge dafr das beide Prozesse den Key bekommen.
2.Dann sendet der user den request mit MessageQueue.send(...) und der superuser empfängt ihn mit MQ.receive()
Aber wie kann man es hinbekommen, dass nicht ein anderer User auch noch MQ.receive() ausführt und dann einige requests umgeleitet werden,
und wie macht man das so, dass der user sich authentifizieren kann?
Und die letzte Frage ist: sollte man für soetwas IPC-MessageQueue verwenden, oder eher sockets oder shared memory?
IPC user -> root process
-
- User
- Beiträge: 206
- Registriert: Freitag 13. März 2015, 18:36
-
- User
- Beiträge: 206
- Registriert: Freitag 13. März 2015, 18:36
Nee ich denke sockets ist schon gut ... letztendlich ist mein Projekt zum lernen gedacht und nicht um alles schon fertig zu haben,
außerdem werde ich im Studium sockets auch noch brauchen (dann aber in C )
Aber könnte man bidirektionale kommunikation nicht auch mit s Queues machen? ...
außerdem werde ich im Studium sockets auch noch brauchen (dann aber in C )
Aber könnte man bidirektionale kommunikation nicht auch mit s Queues machen? ...
Kann man. Muss man mehr Aufwand reinstecken, weil du entweder eine explizite Queue pro client hast (und entsprechend eine generische zum Aufbau genau solcher Queues brauchst, und den Muell abraeumen musst wenn zB dein client stirbt), oder du das Protokoll so aufbohrst das die client-PID als message-typ genutzt wird, um den dispatch individuell zu gestalten.
Sockets haben dieses Prinzip durch ihren accept-Call schon eingebaut. Dafuer baust du da dann wiederum ein Protokoll drueber um Messages zu bekommen, da sockets nur streams sind und du nicht weisst, ob du gerade einen Teil, eine ganze oder gar mehrere Nachrichten empfangen hast.
Sockets haben dieses Prinzip durch ihren accept-Call schon eingebaut. Dafuer baust du da dann wiederum ein Protokoll drueber um Messages zu bekommen, da sockets nur streams sind und du nicht weisst, ob du gerade einen Teil, eine ganze oder gar mehrere Nachrichten empfangen hast.