Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pc:laboratoare:01 [2022/02/27 23:03]
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. ​In fisierul ​de [https://​gitlab.cs.pub.ro/​protocoale-de-comunicatie/​pcom-laboratoare-public/​-/​blob/​master/​lab1/​ex3.txt|aici] avem scris 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 fisier si sa afiseze continutul ​din payload al fiecarui entry.<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];​
Line 206: Line 208:
      ​int ​  size;      ​int ​  size;
    ​}; ​ </​code>​    ​}; ​ </​code>​
-  - (1pAsemanator ​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`). Mai mult astfel de exemple le gasiti ​[[https://​store.chipkin.com/​articles/​telnet-list-of-telnet-servers|aici]] +  - **(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''​.
  
  
  
pc/laboratoare/01.1645995796.txt.gz · Last modified: 2022/02/27 23:03 by vlad_andrei.badoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0