Difference between revisions of "LU-LSP-b13:L10"
(New page: == PD#10: Starprocesu komunikācija == === Uzdevums === Realizēt komunikāciju starp ''parent'' un ''child'' progammām ar ''socket'' palīdzību. Dota programma, kura saskaita divus s...) |
(→Iesūtīšana) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
== PD#10: Starprocesu komunikācija == |
== PD#10: Starprocesu komunikācija == |
||
=== Vienkāršāki socketi === |
|||
Kursa projektā izmantosim socketus zemākā līmenī, bet šoreiz priekš PD10 varat izmantot ērtāku risinājumu: |
|||
* funkcija socketpair() noņem sarežģītību veidojot sockets |
|||
** atgriež pāri ar socketiem, ko var lietot līdzīgi kā pipe, lietojot fork() |
|||
** katrs no procesiem aizver nevajadzīgo faila deskriptoru |
|||
** Šie ir anonīmi socketi - tie neparādās ārpus procesiem un tiem nevar pieslēgties caur tīkla adresi. Tie izmanto domēna adreses/faila mehānismu, un loģiski nav derīgi socket savienojumam starp atsevišķiem datoriem tīklā. |
|||
=== Uzdevums === |
=== Uzdevums === |
||
Line 5: | Line 12: | ||
Realizēt komunikāciju starp ''parent'' un ''child'' progammām ar ''socket'' palīdzību. |
Realizēt komunikāciju starp ''parent'' un ''child'' progammām ar ''socket'' palīdzību. |
||
Parent process padod child procesam ASCII rindiņu, kura satur divus skaitļus. |
|||
Dota programma, kura saskaita divus skaitļus. Programma ielasa datus no stdin, izvada tos uz stdout. Uzdevums: noprogrammēt otru programmu, kas izmanoto šo pirmo saskaitīšanas funkcijas realizācijai. (Testa piemēriem nav obligāti jātiek ievadītiem no konsoles, tos var iekļaut otrās programmas C kodā.) |
|||
Child process rindiņu nolasa (piemēram, ar scanf funkciju), saskaita skatļus, izvada rezultātu (kā ASCII rindiņu) atpakaļ parentam. |
|||
⚫ | |||
⚫ | |||
<pre> |
<pre> |
||
#include <sys/types.h> |
#include <sys/types.h> |
||
⚫ | |||
#include <unistd.h> |
#include <unistd.h> |
||
#include <stdio.h> |
#include <stdio.h> |
||
#include <stdlib.h> |
#include <stdlib.h> |
||
#include <string.h> |
#include <string.h> |
||
⚫ | |||
#include <stdio.h> |
|||
int main(void) |
int main(void) |
||
Line 40: | Line 47: | ||
* Izmantot funkciju ''fork()''. |
* Izmantot funkciju ''fork()''. |
||
* Izmantot funkciju '' |
* Izmantot funkciju ''socketpair()''. |
||
=== Iesūtīšana === |
=== Iesūtīšana === |
||
Iesūtīt programmas C kodu |
Iesūtīt programmas C kodu estudijas.lu.lv |
Latest revision as of 21:30, 31 March 2020
Contents
PD#10: Starprocesu komunikācija
Vienkāršāki socketi
Kursa projektā izmantosim socketus zemākā līmenī, bet šoreiz priekš PD10 varat izmantot ērtāku risinājumu:
- funkcija socketpair() noņem sarežģītību veidojot sockets
- atgriež pāri ar socketiem, ko var lietot līdzīgi kā pipe, lietojot fork()
- katrs no procesiem aizver nevajadzīgo faila deskriptoru
- Šie ir anonīmi socketi - tie neparādās ārpus procesiem un tiem nevar pieslēgties caur tīkla adresi. Tie izmanto domēna adreses/faila mehānismu, un loģiski nav derīgi socket savienojumam starp atsevišķiem datoriem tīklā.
Uzdevums
Realizēt komunikāciju starp parent un child progammām ar socket palīdzību.
Parent process padod child procesam ASCII rindiņu, kura satur divus skaitļus.
Child process rindiņu nolasa (piemēram, ar scanf funkciju), saskaita skatļus, izvada rezultātu (kā ASCII rindiņu) atpakaļ parentam.
Koda šablons:
#include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sock); if (ret) { perror("socketpair"); return 1; } // fork // in parent code: write to socket, wait for reply, read it, and output it // in child code: read from socket, process arguments, write reply, exit return 0; }
Padomi
- Izmantot funkciju fork().
- Izmantot funkciju socketpair().
Iesūtīšana
Iesūtīt programmas C kodu estudijas.lu.lv