This shows you the differences between two versions of the page.
pc:laboratoare:01 [2022/02/27 22:47] vlad_andrei.badoiu [Exerciții] |
pc:laboratoare:01 [2022/03/02 16:32] (current) radu.ciobanu [4. Noțiuni generale C/C++] Reparat headerele din exemplu |
||
---|---|---|---|
Line 86: | Line 86: | ||
---- | ---- | ||
- | Va recomandam următorul [[https://people.duke.edu/~ccc14/sta-663/CrashCourseInC.html|crash course de C]] pentru a va reaminti concepte precum structuri, pointeri si alocarea de memorie. | + | Va recomandăm următorul [[https://people.duke.edu/~ccc14/sta-663/CrashCourseInC.html|crash course de C]] pentru a vă reaminti concepte precum structuri, pointeri si alocarea de memorie. |
=== Compilare === | === Compilare === | ||
Line 113: | Line 113: | ||
=== Apeluri de sistem pentru operații cu fișiere === | === Apeluri de sistem pentru operații cu fișiere === | ||
- | Vom folosi următoarele funcții pentru a interacționa cu fișierele pe Linux: open, close, read, write și lseek. API-ul lor este descris în manual ''man read.2''. Acestea lucrează cu ceea ce numim file descriptors(fd). Simplist, un file descriptor este un integer ce reprezintă un identificator în tabela de fișiere a unui program. De exemplu, dacă creăm deschidem un fișier, identificatorul ar putea fi numărul 4. | + | Vom folosi următoarele funcții pentru a interacționa cu fișierele pe Linux: open, close, read, write și lseek. API-ul lor este descris în manual ''man read.2''. Acestea lucrează cu ceea ce numim file descriptors (fd). Simplist, un file descriptor este un integer ce reprezintă un identificator în tabela de fișiere a unui program. De exemplu, dacă creăm deschidem un fișier, identificatorul ar putea fi numărul 4. |
Line 127: | Line 127: | ||
#include <unistd.h> /* pentru open(), exit() */ | #include <unistd.h> /* pentru open(), exit() */ | ||
#include <fcntl.h> /* O_RDWR */ | #include <fcntl.h> /* O_RDWR */ | ||
- | #include <errno.h> /* perror() */ | + | #include <stdio.h> /* perror() */ |
+ | #include <errno.h> | ||
+ | #include <stdlib.h> | ||
void fatal(char * mesaj_eroare) | void fatal(char * mesaj_eroare) | ||
Line 193: | Line 195: | ||
---- | ---- | ||
- | - (2p) Am văzut faptul că in modelul de referință TCP/IP putem partiționă comunicarea în cinci nivele. Încadrați următoarele operații în unul dintre nivelele discutate. (de ce?): | + | - **(2p)** Am văzut faptul că in modelul de referință TCP/IP putem partiționă comunicarea în cinci nivele. Încadrați următoarele operații în unul dintre nivelele discutate. (de ce?): |
* Transmisie bit-to-bit între două dispozitive | * Transmisie bit-to-bit între două dispozitive | ||
* Criptarea unui mesaj | * Criptarea unui mesaj | ||
Line 200: | Line 202: | ||
* Un router într-o rețea | * Un router într-o rețea | ||
* Un middlebox într-o rețea care face deep packet inspection(DPI) pentru analiza traficului contra malware | * Un middlebox într-o rețea care face deep packet inspection(DPI) pentru analiza traficului contra malware | ||
- | - (3p) Vrem sa ne pregătim pentru a trimite date in format binar peste un mediu de transmisie. Realizați un program în C/C++ care să citească sau scrie un array de elemente de tipul Packet dintr-un fișier. <code C> | + | - **(3p)** Vrem să ne pregătim pentru a trimite date in format binar peste un mediu de transmisie. În fișierul de [[https://gitlab.cs.pub.ro/protocoale-de-comunicatie/pcom-laboratoare-public/-/raw/master/lab1/ex3.txt|aici]] avem un array de structuri de tipul ''Packet'' in format binar. Realizați un program în C/C++ care să citească array-ul cu elemente de tip ''Packet'' din acest fișier și să afișeze conținutul din payload al fiecărei intrări.<code C> |
struct Packet { | struct Packet { | ||
- | char payload[100] | + | char payload[100]; |
int sum; | int sum; | ||
int size; | int size; | ||
}; </code> | }; </code> | ||
- | - (1p) Asemanator cu ce am facut mai sus, vom folosi `telnet` pentru a ne conecta la următorul server TCP: '''towel.blinkenlights.nl'''. Acest server trimite un șir de biți către noi, iar telnet îi afișează pe ecran(`stdout`). | + | - **(2p)** Asemănător cu ce am făcut mai sus, vom folosi ''telnet'' pentru a ne conecta la următorul server TCP: ''towel.blinkenlights.nl''. Acest server trimite un șir de biți către noi, iar telnet îl afișează pe ecran (''stdout''). Mai multe astfel de exemple le găsiți [[https://store.chipkin.com/articles/telnet-list-of-telnet-servers|aici]] |
- | - (4p) Pentru a ne obișnui cu programarea low level, scrieți un utilitar similar cu ''cat'' în C/C++. Acesta trebuie să afișeze conținutul unui fișier, linie cu linie la ''stdout''. | + | - **(3p)** Pentru a ne obișnui cu programarea low level, scrieți un utilitar similar cu ''cat'' în C/C++. Acesta trebuie să afișeze conținutul unui fișier, linie cu linie la ''stdout''. |