Υλοποίηση Κατανεμημένης Εφαρμογής με Χρήση των Υπηρεσιών των Πρωτοκόλλων ΤCP και UDP

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Υλοποίηση Κατανεμημένης Εφαρμογής με Χρήση των Υπηρεσιών των Πρωτοκόλλων ΤCP και UDP"

Transcript

1 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΣΤΑ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Μάθημα: Θέμα Εργασίας: Υλοποίηση Κατανεμημένης Εφαρμογής με Χρήση των Υπηρεσιών των Πρωτοκόλλων ΤCP και UDP Υπεύθυνος Καθηγητής: Θ. Αποστολόπουλος Ομάδα Εργασίας: Βασιλείου Θεώνη Γάκης Κωνσταντίνος Οικονομίδης Δημήτριος ΑΚΑΔ. ΕΤΟΣ Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 1

2 ΠΕΡΙΓΡΑΦΗ ΕΡΓΑΣΙΑΣ Η παρούσα εφαρμογή πελάτη / εξυπηρετητή υλοποιήθηκε στα πλαίσια του μαθήματος του Μ.Π.Σ. «Πληροφοριακά Συστήματα» του Ο.Π.Α. Πρόκειται για μια κατανεμημένη εφαρμογή που χρησιμοποιεί τις υπηρεσίες των πρωτοκόλλων TCP και UDP και κατά την οποία μια διεργασία master αναθέτει εργασίες (tasks) σε διεργασίες slaves. Η υλοποίηση της άσκησης έγινε σε περιβάλλον λειτουργικού συστήματος UNIX με την γλώσσα προγραμματισμού C και με την χρήση των λειτουργιών των BSD sockets. Η λειτουργία της εφαρμογής έχει ως εξής: 1. Ο master ξεκινά και αναμένει εθελοντές slaves έχοντας μια (σταθερή) λίστα εργασιών προς διεκπεραίωση. 2. Ένας εθελοντής slave ξεκινά και δηλώνει τη παρουσία του στον master στέλνοντας κατάλληλο μήνυμα. 3. Ο master καταγράφει τον παραπάνω slave στη λίστα με τους διαθέσιμους (για την εκτέλεση εργασιών) slaves και ανοίγει ένα κανάλι επικοινωνίας μέσω του οποίου ελέγχει κατάλληλα τον slave (με χρήση συγκεκριμένων εντολών / αποκρίσεων). 4. Ο slave «υπακούει» στις εντολές του master (εκτελεί ή αναστέλλει εργασίες που του αναθέτει ο master, δίνει αναφορά της κατάστασής του, τερματίζει) 5. Ο master ενημερώνει κατάλληλα τις λίστες με τους διαθέσιμους slaves και τις προς εκτέλεση εργασίες (όταν εκτελείται επιτυχώς κάποια εργασία). 6. O master, με την επιτυχή εξάντληση της λίστας των προς διεκπεραίωση εργασιών, ειδοποιεί τους συνεργαζόμενους slaves να τερματίσουν τη λειτουργία τους. Οι εργασίες που αναθέτει ο master στους slaves αφορούν λήψη εγγράφου web. Ο slave καλεί την εντολή wget του λειτουργικού συστήματος UNIX με παράμετρο τη διεύθυνση url που δέχεται από τον master. Η επικοινωνία στο κανάλι slave registration γίνεται με χρήση του πρωτοκόλλου UDP. Ο master ακούει σε συγκεκριμένο port. Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 2

3 Το μήνυμα «παρουσίας» που στέλνει ο slave είναι ένα string (τελειώνει με χαρακτήρα αλλαγής γραμμής) της μορφής: HERE_I_AM n, όπου n το port number στο οποίο ακούει ο slave (αυτό που χρησιμοποιείται για το κανάλι εντολών). Το κανάλι εντολών είναι μια σύνδεση TCP την οποία ανοίγει ο master (κάνει active open). Κάθε εντολή που στέλνει ο master προς το slave είναι string (τελειώνει με χαρακτήρα αλλαγής γραμμής) της μορφής: εντολή [όρισμα] Το σύνολο των εντολών δίνεται στον παρακάτω πίνακα: Εντολή master Περιγραφή εντολής Απόκριση slave (για τον slave) GET url Ανάθεση εργασίας λήψης εγγράφου από τη ΟΚ ή LATER διεύθυνση url STOP Αναστολή εργασίας OK EXIT Αναστολή εργασίας και τερματισμός ΟΚ λειτουργίας STATUS Αναφορά κατάστασης BUSY ή IDLE Ο slave, μετά την ολοκλήρωση κάθε εργασίας που έχει αναλάβει στέλνει στον master, μέσω του καναλιού registration, ένα μήνυμα (string) της μορφής: THANK_YOU n (στην περίπτωση επιτυχίας) ή SORRY n (στην περίπτωση αποτυχίας), όπου n το port number στο οποίο ακούει ο slave (παρόμοια με το μήνυμα HERE_I_AM ). Η λίστα με τους εθελοντές όπως και η λίστα με τα αρχεία (τα οποία διαβάζονται στην αρχή εκτέλεσης του προγράμματος) υλοποιούνται ως δυναμικές λίστες με την χρήση δεικτών(pointers) και δομών(structs) της γλώσσας C. Η συγκεκριμένη περιγραφή της δομής τους περιλαμβάνεται στο αρχείο επικεφαλίδων inet.h. Ο master, κατά τη λειτουργία του εμφανίζει πληροφορίες σχετικά με τους slaves που ελέγχει, όπως ΙΡ διεύθυνση και port number του slave, συνολικό αριθμό εργασιών που ανέθεσε στον slave, το όνομα του τελευταίου url που ανέθεσε στον slave κ.α. Η λίστα με τις προς εκτέλεση εργασίες (δηλαδή η λίστα με τα urls) δίνεται ως αρχείο ASCII με ένα url ανά γραμμή. Το όνομα του αρχείου δίνεται ως παράμετρο κατά τη κλήση του master. Η κλήση του master γίνεται ως εξής: master filename [port], όπου filename : το όνομα του αρχείου που περιέχει τη λίστα των εργασιών port : προαιρετικά ο αριθμός του port στο οποίο αναμένει μηνύματα ο master (εάν δεν παρέχεται τότε χρησιμοποιείται η οριζόμενη από το ίδιο το πρόγραμμα στο αρχείο επικεφαλίδων). Η κλήση του slave γίνεται ως εξής: Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 3

4 slave slave_port [master_addr [master_port]], όπου slave_port : ο αριθμός του port στο οποίο αναμένει σύνδεση ο slave (για το κανάλι εντολών). Αν είναι 0, ο slave χρησιμοποιεί οποιοδήποτε port είναι διαθέσιμο από το σύστημα. master_addr : προαιρετικά η ΙΡ διεύθυνση του master (διαφορετικά θα ορίζεται από το ίδιο το πρόγραμμα ως σταθερή). master_port : προαιρετικά ο αριθμός του port στο οποίο αναμένει μηνύματα ο master (εάν δεν παρέχεται τότε χρησιμοποιείται η οριζόμενη από το ίδιο το πρόγραμμα στο αρχείο επικεφαλίδων). Κατά την λειτουργία τόσο του master όσο και του slave, εμφανίζονται στις οθόνες των υπολογιστών όπου εκτελούνται πληροφορίες σχετικά με τις συνδέσεις, τα μηνύματα που ανταλλάσσονται, οι εγγραφές νέων slaves (όσον αφορά τον master) ή η πορεία των εργασιών (όσον αφορά τον slave). Ειδικότερα όσον αφορά τον master ο χρήστης έρχεται σε επαφή με δύο μενού επιλογών: Ένα γενικό και ένα ειδικό για κάποιον slave που έχει επιλέξει. Η δομή τους μαζί με κάποιες εξηγήσεις, παρατίθεται παρακάτω: Πρώτα το γενικό μενού επιλογών : ********************************* * GENERAL COMMANDS* ********************************* * 1. PRINT TASK LIST : Εκτύπωση της λίστας των εργασιών * 2. PRINT SLAVE LIST : Εκτύπωση της λίστας των slaves * 3. SELECT SLAVE : Επιλογή slave για αποστολή εντολών * 4. QUIT PROGRAM : Έξοδος από το πρόγραμμα ********************************** Εφόσον ο χρήστης επιλέξει το 3, εμφανίζεται η λίστα όλων των slaves, από όπου επιλέγοντας έναν από αυτούς δίνοντας το ID του, κατόπιν εμφανίζεται το μενού ειδικών επιλογών για τον συγκεκριμένο slave : *************************** * SLAVE COMMANDS* *************************** * 1. GET url : Λήψη εγγράφου από τη διεύθυνση url * 2. STOP : Αναστολή εργασίας * 3. EXIT : Αναστολή εργασίας και τερματισμός λειτουργίας * 4. STATUS : Αναφορά κατάστασης slave *************************** Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 4

5 Το αρχείο των επικεφαλίδων(inet.h) /************************************************************* * inet.h * * Definitions File for master-slave application * *************************************************/ /* Include all the necessary system header files */ #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/file.h> #include <sys/wait.h> #include <sys/time.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> #include <errno.h> #include <math.h> #include <memory.h> /* Make the appropriate definitions for the application */ #define GET 1 #define STOP 2 #define EXIT 3 #define STATUS 4 #define HERE_I_AM 0 #define THANK_YOU 1 #define SORRY 2 #define OK 3 #define LATER 4 #define DONE 1 #define BUSY 0 #define IDLE 1 #define MAXLINE 80 #define MAXMESG 512 #define TIMEOUT 3 #define MASTER_HOST_ADDR " " #define MASTER_UDP_PORT 6060 /* Definition of the struct of each node of the slaves' list */ typedef struct slave_node int id; /* Slave's unique ID, used for internal purposes */ u_short port; /* Slave's TCP port.*/ u_long ip_address; /* Slave's ip address in u+long format */ char *address; /* The slave's ip address in dotted representation*/ char *name_address; /* The slave's domain name */ int total_cmds_no; /* Number of commands assigned to the slave.*/ char *last_url; /* Last URL assigned to the slave for fetching.*/ int status; /* The status of the slave, 0 for busy, 1 for idle*/ struct slave_node *next; /* Pointer to next slave enlisted.*/ slave; /* Definition of the struct of each node of the tasks' list */ typedef struct task_node int id; /* Task's unique ID, used for internal purposes */ char url[maxline+1]; /* The url of the file to be downloaded */ Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 5

6 int status; /* The status of the task, finished or not*/ struct task_node *next; /* Pointer to next task enlisted.*/ task; /************************************************************************* * int error(errormsg) * * Error function that terminates application * * Parameters : errormsg - An explanatory string of the fatal error * *************************************************************************/ int error(errormsg) char *errormsg; printf("%s\n",errormsg); perror(0); exit(1); /************************************************************************* * int set_timeout (int cur_fd, unsigned int seconds) * Sets a timeout using select() for the socket passed as a parameter * * Parameters : cur_fd - The file descriptor of a socket * * seconds - The seconds of the timeout * *************************************************************************/ int set_timeout (int cur_fd, unsigned int seconds) fd_set set; struct timeval timeout; int res; /* Initialize the file descriptor set. */ FD_ZERO (&set); FD_SET (cur_fd, &set); /* Initialize the timeout data structure. */ timeout.tv_sec = seconds; timeout.tv_usec = 0; /* select returns 0 if timeout, 1 if input available, -1 if error. Repeat select if a signal interrupted*/ while (((res = select (FD_SETSIZE,&set, NULL, NULL,&timeout)) == -1) && (errno == EINTR)); return res; Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 6

7 Αρχείο master (master.c) /************************************************************ * master.c * * The program of the master process in our application. * * Responsible for handling the list of slaves and tasks, * * accepting, registering and commanding new slaves, * * and assigning new tasks to slaves * ************************************************************/ #include "inet.h" /* Global variables for the head and tail of each list */ slave *slave_list_head, *slave_list_tail; task *task_list_head, *task_list_tail; /********************************************************************* * void add_slave(int id, u_long ip_address, char *address, char * * *name_address, u_short port) * * Adds a new node at the end of the list of the slaves with values * * of fields passed as parameters * *********************************************************************/ void add_slave(int id, u_long ip_address, char *address, char *name_address, u_short port) slave *temp; if (slave_list_head == NULL) /* The list is empty, insertion of the first node */ slave_list_head = (slave *)malloc(sizeof(slave)); slave_list_head->id = id; slave_list_head->port = port; slave_list_head->ip_address = ip_address; slave_list_head->address = (char *)malloc(strlen(address)+1); strcpy(slave_list_head->address, address); slave_list_head->name_address = (char *)malloc(strlen(name_address)+1); strcpy(slave_list_head->name_address,name_address); slave_list_head->total_cmds_no = 0; slave_list_head->last_url = (char *)malloc(maxline+1); strcpy(slave_list_head->last_url,"-"); slave_list_head->next = NULL; slave_list_tail = slave_list_head; /* The list is not empty, add the node to the end of the list */ temp = (slave *)malloc(sizeof(slave)); temp->id = id; temp->port = port; temp->ip_address = ip_address; temp->address = (char *)malloc(strlen(address)+1); strcpy(temp->address, address); temp->name_address = (char *)malloc(strlen(name_address)+1); strcpy(temp->name_address,name_address); temp->total_cmds_no = 0; temp->last_url = (char *)malloc(maxline+1); strcpy(temp->last_url,"-"); temp->next = NULL; slave_list_tail->next = temp; slave_list_tail = temp; Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 7

8 /****************************************************************** * int remove_slave(int id) * * Removes a node from the list of slaves * * Parameters : id - The unique id of the slave to be removed * *******************************************************************/ int remove_slave(int id) slave *temp; slave *prev; int found = 0; if (slave_list_head == NULL) /* The list does not contain nodes */ printf("slave list empty!\n"); return 0; prev = NULL; temp = slave_list_head; while ((temp!= NULL) &&!found) if (temp->id!= id) prev = temp; temp = temp->next; found = 1; if (!found) return 0; if (prev == NULL) /* Removal of the head node */ slave_list_head = slave_list_head->next; if (temp->next == NULL) /* Removal of the tail of the list */ slave_list_tail = prev; /* Removal of a middle node */ prev->next = temp->next; return 1; /****************************************************************** * slave *select_slave(int id) * * Returns a pointer to a particular slave given its id * * Parameters : id - The unique id of the slave to be selected * *******************************************************************/ slave *select_slave(int id) slave *temp; int found = 0; temp = slave_list_head; while ((temp!= NULL) &&!found) if (temp->id == id) Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 8

9 found = 1; temp = temp->next; if (!found) return NULL; return temp; /************************************************************************* * slave *find_slave(char *address, u_short port) * * Returns a pointer to a particular slave given its address and TCP port * * Parameters : address - The dotted ip address of the slave * * port - The TCP port of the slave * *************************************************************************/ slave *find_slave(char *address, u_short port) slave *temp; int found = 0; temp = slave_list_head; while ((temp!= NULL) &&!found) if ((strcmp(temp->address, address) == 0) && (temp->port == port)) found = 1; temp = temp->next; if (!found) return NULL; return temp; /******************************************************************* * void update_slave(int id, char *url) * * Updates the values of url and commands assigned to a slave * * Parameters : id - The unique id of the slave to be updated * * url - The last url assigned to the slave * *******************************************************************/ void update_slave(int id, char *url) slave *temp; if ((temp = select_slave(id)) == NULL) printf("slave with id %d not found!\n", id); temp->last_url = url; temp->total_cmds_no = temp->total_cmds_no + 1; /****************************************************************** * void print_slave_list() * * Traverses the whole list of slaves and prints its contents * ******************************************************************/ void print_slave_list() slave *temp; if (slave_list_head == NULL) Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 9

10 printf("slave list empty!\n"); return; temp = slave_list_head; while (temp!= NULL) printf("slave ID:%d, port:%d, ip_address:%s - %s\n",temp->id,temp- >port,temp->address,temp->name_address); printf("last_url:%s, total_cmds_no:%d\n",temp->last_url,temp- >total_cmds_no); temp = temp->next; /************************************************************ * void empty_slave_list() * * Initializes the list of slaves * ************************************************************/ void empty_slave_list() slave_list_head = slave_list_tail = NULL; /******************************************************************* * void add_task(int id, char url[maxline+1]) * * Adds a new node at the end of the list of the tasks with values * * of fields passed as parameters * *******************************************************************/ void add_task(int id, char url[maxline+1]) task *temp; if (task_list_head == NULL) /* The list is empty. Insert head node */ task_list_head = (task *)malloc(sizeof(task)); task_list_head->id = id; strcpy(task_list_head->url,url); task_list_head->status =!DONE; task_list_head->next = NULL; task_list_tail = task_list_head; /* Append node to the list */ temp = (task *)malloc(sizeof(task)); temp->id = id; strcpy(temp->url,url); temp->status =!DONE; temp->next = NULL; task_list_tail->next = temp; task_list_tail = temp; /****************************************************************** * task *select_task(int id) * * Returns a pointer to a particular task given its id * * Parameters : id - The unique id of the task to be selected * *******************************************************************/ task *select_task(int id) task *temp; int found = 0; Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 10

11 temp = task_list_head; while ((temp!= NULL) &&!found) if (temp->id == id) found = 1; temp = temp->next; if (!found) return NULL; return temp; /****************************************************************** * task *find_task(char *url) * * Returns a pointer to a particular task given its url * * Parameters : url - The url of the file for download * *******************************************************************/ task *find_task(char *url) task *temp; int found = 0; temp = task_list_head; while ((temp!= NULL) &&!found) if (strcmp(temp->url, url) == 0) found = 1; temp = temp->next; if (!found) return NULL; return temp; /************************************************************************* * int all_tasks_done() * * Examines if the list of tasks is exchausted, i.e. all the tasks * * have been succesfully completed. Returns 0 if at least one * * task is not completed, otherwise if all tasks are done returns 1. * *************************************************************************/ int all_tasks_done() task *temp; int found = 0; temp = task_list_head; while ((temp!= NULL) &&!found) if (temp->status!= DONE) found = 1; temp = temp->next; if (found) return 0; Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 11

12 return 1; /******************************************************************* * void update_task(int id, int status) * * Updates the value of status of a task * * Parameters : id - The unique id of the task to be updated * * status - The new value of status * *******************************************************************/ void update_task(int id, int status) task *temp; if ((temp = select_task(id)) == NULL) printf("task with id %d not found!\n", id); temp->status = status; /****************************************************************** * void print_task_list() * * Traverses the whole list of tasks and prints its contents * *******************************************************************/ void print_task_list() task *temp; if (task_list_head == NULL) printf("task list empty!\n"); return; temp = task_list_head; while (temp!= NULL) printf("task ID:%d, url:%s",temp->id,temp->url); if ((temp->status)!= DONE) printf("status:not DONE\n"); printf("status:done\n"); temp = temp->next; /******************************************************************* * void empty_slave_list() * * Initializes the list of tasks * *******************************************************************/ void empty_task_list() task_list_head = task_list_tail = NULL; /****************************************************************** * void slave_commands_menu() * * Prints the menu of commands for a slave * *******************************************************************/ void slave_commands_menu() printf("\n") ; printf("*****************\n") ; printf("* SLAVE COMMANDS*\n") ; printf("*****************\n") ; printf("* 1. GET url *\n") ; printf("* 2. STOP *\n") ; Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 12

13 printf("* 3. EXIT *\n") ; printf("* 4. STATUS *\n") ; printf("*****************\n") ; /******************************************************************* * void general_commands_menu() * * Prints the menu of general commands for the master process * *******************************************************************/ void general_commands_menu() printf("\n") ; printf("*************************\n") ; printf("* GENERAL COMMANDS *\n") ; printf("*************************\n") ; printf("* 1. PRINT TASK LIST *\n") ; printf("* 2. PRINT SLAVE LIST *\n") ; printf("* 3. SELECT SLAVE *\n") ; printf("* 4. QUIT PROGRAM *\n") ; printf("*************************\n") ; /************************************************************************* * int read_slave_port(char buf[]) * * Extracts and returns the slave's port from the end of message passed * * as parameter. The message has the format e.g. HERE_I_AM 4004 * * Parameters : buf - A string containing the registration message * * received from slave from UDP channel * *************************************************************************/ int read_slave_port(char buf[]) int i = 0, ncount = 0, a[10], nret = 0, j, k, ntemp; for (i=0; i<10; i++) a[i]= '\0'; while (buf[i]!= '\n') if (buf[i] > '9' && buf[i] < '0') i++; continue; a[ncount] = buf[i] - '0'; ncount++; i++; for (j=0 ; j < ncount ; j++) ntemp = 1; for (k=0 ; k < ncount-j-1 ; k++) ntemp = ntemp * 10; nret += a[j] * ntemp; return nret; Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 13

14 /************************************************************ * int main(int argc, char *argv[]) * * The main procedure of the master program * ************************************************************/ int main(int argc, char *argv[]) char *filename; u_short UDP_port, slave_tcp_port; FILE *tasks_file; char url[maxline+1], mesg[maxmesg], recvmesg[maxmesg+1]; int task_id, slave_id, sel_sl_id; int cli_len, recvlength, time_expired, nbytes; int UDP_sockfd, TCP_sockfd; struct sockaddr_in UDP_serv_addr, UDP_cli_addr, TCP_slav_addr; u_long slave_ipaddr; slave *temp_slave; task *temp_task; int menu_selection, slave_selection, task_selection; struct hostent *hp; if ((argc < 2) (argc > 3)) error("master Usage: master <tasks_filename> [udp_port]\n"); filename = argv[1]; if (argc > 2) UDP_port=atoi(argv[2]); UDP_port = MASTER_UDP_PORT; printf("master listens to udp_port:%d\n", UDP_port); if ((tasks_file = fopen(filename,"r"))==null) error("master:error opening file with tasks!\n"); /* Initialize the list of tasks */ empty_task_list(); task_id = 0; while ( fgets(url, MAXLINE+1, tasks_file)!= NULL ) printf("url:%s",url); task_id = task_id + 1; add_task(task_id, url); fclose(tasks_file); print_task_list(); /* Open a UDP socket */ if ((UDP_sockfd = socket(af_inet, SOCK_DGRAM, 0))<0) error("master:can't open datagram socket\n"); printf("master:opened UDP socket with descriptor:%d\n",udp_sockfd); /* Bind local address for UDP socket */ bzero((char *) &UDP_serv_addr, sizeof(udp_serv_addr)); UDP_serv_addr.sin_family = AF_INET; UDP_serv_addr.sin_addr.s_addr = htonl(inaddr_any); UDP_serv_addr.sin_port = htons(udp_port); if (bind(udp_sockfd, (struct sockaddr *) &UDP_serv_addr, sizeof(udp_serv_addr))<0) error("master:can't bind local address\n"); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 14

15 printf("master:succesfully bound address for UDP socket\n"); empty_slave_list(); slave_id = 0; while (!all_tasks_done()) time_expired = set_timeout(udp_sockfd, TIMEOUT); if (time_expired == -1) error("master:select error\n"); if (time_expired == 0) printf("master:time waiting new slave registrations has expired!\n"); printf("master:continuing...\n"); do general_commands_menu(); printf("select a number of your choice:") ; scanf("%d", &menu_selection); while (menu_selection < 1 menu_selection > 4) ; switch (menu_selection) case 1: if (task_list_head == NULL) printf("task list empty!\n"); print_task_list(); case 2: if (slave_list_head == NULL) printf("slave list empty!\n"); print_slave_list(); case 3: if (slave_list_head == NULL) printf("slave list empty!\n"); print_slave_list(); do temp_slave = NULL ; printf("give slave id:"); scanf("%d", &sel_sl_id); while ((temp_slave = select_slave(sel_sl_id)) == NULL); do slave_commands_menu(); printf("select a number of your choice:") ; scanf("%d", &slave_selection); while (slave_selection < 1 slave_selection > 4) ; /* Connect to the slave to send him a command. Fill in the structure TCP_slav_addr with the address of the slave */ bzero((char *) &TCP_slav_addr, sizeof(tcp_slav_addr)); TCP_slav_addr.sin_family = AF_INET; TCP_slav_addr.sin_addr.s_addr = htonl(temp_slave->ip_address); TCP_slav_addr.sin_port = htons(temp_slave->port); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 15

16 /* Open a TCP socket */ if ((TCP_sockfd = socket(af_inet, SOCK_STREAM, 0))<0) error("master:can't open TCP stream socket\n"); printf("master:opened TCP socket with descriptor:%d\n",tcp_sockfd); /* Now connect to the slave */ if (connect(tcp_sockfd, (struct sockaddr*) &TCP_slav_addr, sizeof(tcp_slav_addr)) < 0) error("master:can't connect to slave with id:%d",temp_slave->id); printf("master:connected to TCP socket\n"); NULL); switch (slave_selection) case GET: printf("get\n"); print_task_list(); do temp_task = NULL; printf("select task id:"); scanf("%d", &task_selection); while ((temp_task = select_task(task_selection)) == bzero(mesg,sizeof(mesg)); strcpy (mesg,"get "); strcat(mesg,temp_task->url); printf("message to be sent to TCP socket: %s\n",mesg); update_slave(temp_slave->id, temp_task->url); case STOP: printf("stop\n"); bzero(mesg,sizeof(mesg)); strcpy (mesg,"stop\n"); printf("message to be sent to TCP socket: %s\n",mesg); case EXIT: printf("exit\n"); bzero(mesg,sizeof(mesg)); strcpy (mesg,"exit\n"); printf("message to be sent to TCP socket: %s\n",mesg); temp_slave->id); if ( remove_slave(temp_slave->id)!= 1 ) printf("slave with id:%d not found in list!\n", case STATUS: printf("status\n"); bzero(mesg,sizeof(mesg)); strcpy (mesg,"status\n"); printf("message to be sent to TCP socket: %s\n",mesg); if ((nbytes = write(tcp_sockfd, mesg, (strlen(mesg)))) <0) error("master: write error in stream socket"); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 16

17 printf("message sent over TCP socket: %s of bytes %d\n",mesg,nbytes); /* Read a line from the socket - the answer of the slave */ bzero(recvmesg, MAXMESG); nbytes = read(tcp_sockfd, recvmesg, MAXMESG-1); if (nbytes < 0) error("master: read error in stream socket"); printf("master:message received:%s\n", recvmesg); close(tcp_sockfd); case 4: if (slave_list_head!= NULL) printf("exiting all slaves!!!\n"); temp_slave = slave_list_head ; while (temp_slave!= NULL) /* Connect to the slave to send him a command. Fill in the structure TCP_slav_addr with the address of the slave */ bzero((char *) &TCP_slav_addr, sizeof(tcp_slav_addr)); TCP_slav_addr.sin_family = AF_INET; TCP_slav_addr.sin_addr.s_addr = htonl(temp_slave->ip_address); TCP_slav_addr.sin_port = htons(temp_slave->port); /* Open a TCP socket */ if ((TCP_sockfd = socket(af_inet, SOCK_STREAM, 0))<0) error("master:can't open TCP stream socket\n"); printf("master:opened TCP socket with descriptor: %d\n",tcp_sockfd); /* Now connect to the slave */ if (connect(tcp_sockfd, (struct sockaddr*) &TCP_slav_addr, sizeof(tcp_slav_addr)) < 0) error("master:can't connect to slave with id:%d",temp_slave->id); printf("master:connected to TCP socket\n"); bzero(mesg,sizeof(mesg)); strcpy (mesg,"exit"); if ((nbytes = write(tcp_sockfd, mesg, (strlen(mesg)))) <0) error("master: write error in stream socket"); printf("message sent over TCP socket: %s of bytes %d\n",mesg,nbytes); /* Read a line from the socket - the answer of the slave */ bzero(recvmesg, MAXMESG); nbytes = read(tcp_sockfd, recvmesg, MAXMESG-1); if (nbytes < 0) error("master: read error in stream socket"); printf("master:message received:%s\n", recvmesg); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 17

18 close(tcp_sockfd); temp_slave = temp_slave->next; printf("slave list empty!\n"); printf("terminating!!!\n"); close(udp_sockfd); exit(0); /* Receive from the UDP_socket the registration and other messages sent from slaves */ cli_len = sizeof(udp_cli_addr); bzero(mesg, MAXMESG); if ((recvlength = recvfrom(udp_sockfd, mesg, MAXMESG, 0, (struct sockaddr *) &UDP_cli_addr, &cli_len)) < 0) error("master:receive from UDP socket error\n"); printf("master:message received from UDP socket: %s\n",mesg); slave_tcp_port = (u_short)read_slave_port(mesg) ; /* Convert from network to host representation */ slave_ipaddr = ntohl(udp_cli_addr.sin_addr.s_addr); if (!strncmp (mesg, "HERE_I_AM",9)) /* It is a slave registration message. Get the TCP port of the slave and the IP address from sockadrr_in struct*/ printf("master:new slave registration with TCP port:%d ip_address:%s \n",slave_tcp_port, inet_ntoa(udp_cli_addr.sin_addr)); slave_id = slave_id + 1; hp = gethostbyaddr((char *) &UDP_cli_addr.sin_addr, sizeof(udp_cli_addr.sin_addr), AF_INET); add_slave(slave_id, slave_ipaddr, inet_ntoa(udp_cli_addr.sin_addr), (char *) hp->h_name, slave_tcp_port); print_slave_list(); if (!strncmp (mesg, "THANK_YOU",9)) if ((temp_slave = find_slave(inet_ntoa(udp_cli_addr.sin_addr),slave_tcp_port)) == NULL) printf("master:slave with TCP port:%d ip_address:%s not found\n",slave_tcp_port, inet_ntoa(udp_cli_addr.sin_addr)); printf("master:slave with TCP port:%d ip_address:%s found\n",slave_tcp_port, inet_ntoa(udp_cli_addr.sin_addr)); >last_url); printf("master:slave last url:%s\n", temp_slave->last_url); if ((temp_task = find_task(temp_slave->last_url)) == NULL) printf("master:url:%s not found in task list\n",temp_slave- Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 18

19 update_task(temp_task->id,done); printf("master:task with id:%d status changed to DONE\n",temp_task->id); if (!strncmp (mesg, "SORRY",5)) printf("task list done!!!\n"); if (slave_list_head!= NULL) printf("exiting all slaves!!!\n"); temp_slave = slave_list_head ; while (temp_slave!= NULL) /* Connect to the slave to send him a command. Fill in the structure TCP_slav_addr with the address of the slave */ bzero((char *) &TCP_slav_addr, sizeof(tcp_slav_addr)); TCP_slav_addr.sin_family = AF_INET; TCP_slav_addr.sin_addr.s_addr = htonl(temp_slave->ip_address); TCP_slav_addr.sin_port = htons(temp_slave->port); /* Open a TCP socket */ if ((TCP_sockfd = socket(af_inet, SOCK_STREAM, 0))<0) error("master:can't open TCP stream socket\n"); printf("master:opened TCP socket with descriptor:%d\n",tcp_sockfd); /* Now connect to the slave */ if (connect(tcp_sockfd, (struct sockaddr*) &TCP_slav_addr, sizeof(tcp_slav_addr)) < 0) error("master:can't connect to slave with id:%d",temp_slave->id); printf("master:connected to TCP socket\n"); bzero(mesg,sizeof(mesg)); strcpy (mesg,"exit"); if ((nbytes = write(tcp_sockfd, mesg, (strlen(mesg)))) <0) error("master: write error in stream socket"); printf("message sent over TCP socket: %s of bytes %d\n",mesg,nbytes); /* Read a line from the socket - the answer of the slave */ bzero(recvmesg, MAXMESG); nbytes = read(tcp_sockfd, recvmesg, MAXMESG-1); if (nbytes < 0) error("master: read error in stream socket"); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 19

20 printf("master:message received:%s\n", recvmesg); close(tcp_sockfd); temp_slave = temp_slave->next; printf("slave list empty!\n"); printf("terminating!!!\n"); close(udp_sockfd); exit(0); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 20

21 Αρχείο slave (slave.c) /************************************************************ * slave.c * * The program of the slave process in our application. * * Responsible for registering to the master process, * * and executing the tasks assigned from master, that is * * downloading the files from the urls sent from master * ***********************************************************/ #include "inet.h" /* Global variables for the slave program */ int slv_status=idle, /* The slave status (defined in inet.h) */ childpid, /* The process id of the child process */ UDP_sockfd, TCP_sockfd, conntcp_sockfd; /* socket descriptors */ struct sockaddr_in master_udp_addr, master_tcp_addr, slav_udp_addr, slav_tcp_addr; char TCP_port[8], url[maxline]; /***************************************************************************** * void writeudp (int respond, int sockfd, struct sockaddr *pmast_addr, int * * addr_len, char TCP_port[8]) * * Sends a message to the master via UDP channel. The message to be sent is * * specified by the value of var respond * ****************************************************************************/ void writeudp (int respond, int sockfd, struct sockaddr *pmast_addr, int addr_len, char TCP_port[8]) char message[maxmesg]; int n; switch (respond) case HERE_I_AM : strcpy(message, "HERE_I_AM "); case THANK_YOU : strcpy(message, "THANK_YOU "); case SORRY : strcpy(message, "SORRY "); strcat(message, TCP_port); strcat(message, "\n"); n = strlen(message); if (sendto(sockfd, message, n, 0, pmast_addr, addr_len)!= n) error("slave: Sendto error on UDP socket\n"); printf("message sent to UDP socket:%s\n",message); /*************************************************************************** * void writetcp (int respond, int sockfd) * * Sends a message to the master via TCP channel. * * Parameters : respond - A symbolic value determining the type of message * sockfd - The TCP socket descriptor * ***************************************************************************/ void writetcp (int respond, int sockfd) char message[maxmesg]; int n; Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 21

22 switch (respond) case OK : strcpy(message, "OK"); case LATER : strcpy(message, "LATER"); case IDLE : strcpy(message, "IDLE"); case BUSY : strcpy(message, "BUSY"); strcat(message, "\n"); n = strlen(message); if (write(sockfd, message, n)!= n) error("slave: Write error in TCP socket\n"); printf("succesfully wrote to the TCP socket:%s\n",message); /***************************************************************************** * void extract_url_from_mesg (char message[maxmesg]) * * Accepts as input a message of the form "GET <url>" and extracts the url * * part storing it in the global variable url * * Parameters : message -A string containing the command received from master* ****************************************************************************/ void extract_url_from_mesg (char message[maxmesg]) int i=0, j=0; char c; bzero(url, MAXLINE); while (!(isspace(message[i++]))); while ((c = message[i])!= '\n') url[j++] = c; i++; /***************************************************************************** * void notify_termination (int pid, int status) * * Used for asynchronous notification of the termination of the child process* * Parameters : pid - the process id of the child process finished * * status - The status of termination (succesful or not) * ****************************************************************************/ void notify_termination (int pid, int status) int respond; status = status >> 8; printf("child with process ID %d finished with status %d\n", pid, status); slv_status = IDLE; /* Update slave status to idle */ if (status == 0) respond = THANK_YOU; if (status == 1) respond = SORRY; writeudp(respond, UDP_sockfd, (struct sockaddr *) &master_udp_addr, sizeof(master_udp_addr), TCP_port); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 22

23 /************************************************************************* * void sigchld_handler (int signum) * * Signal handler for the signal SIGCHLD issued by child process to slave * * when finished * *************************************************************************/ void sigchld_handler (int signum) int pid; int status; /* Wait for the child process without hanging the program */ pid = waitpid (childpid, &status, WNOHANG); if (pid <= 0) /* No child to be noticed*/ return; notify_termination(pid,status); /************************************************************************* * void sigterm_handler (int signum) * * Signal handler for the signal SIGTERM issued by slave to child * **************************************************************************/ void sigterm_handler (int signum) exit(1); /******************************************************************* * int main(int argc, char *argv[]) * * The main procedure of the slave program * *******************************************************************/ main(int argc, char *argv[]) int n, status, time_expired, mast_length, /* The length of the struct sockaddr of master */ respond; /* The type of message to be sent */ u_short master_udp_port; /* port read from command line */ u_long master_ipaddr; char mast_request[maxmesg]; struct hostent *hptr; /* result of host name lookup */ if ((argc < 2) (argc>4)) error("usage: slave <slave_port> [master_addr [master_port]\n"); /* Get from command line the TCP port for us and if given the IP address and UDP port for master */ bzero(tcp_port, 8); strcpy(tcp_port, argv[1]); if (argv[2]) /* Check whether the name or the IP address of the server is given */ if ((hptr=gethostbyname(argv[2]))!=null) bcopy((char *)hptr->h_addr, (char *) &master_ipaddr, hptr- >h_length); master_ipaddr = inet_addr(argv[2]); if (argv[3]) master_udp_port = atoi(argv[3]); master_udp_port = MASTER_UDP_PORT; master_ipaddr = inet_addr(master_host_addr); /* Open a UDP socket */ if ((UDP_sockfd=socket(AF_INET, SOCK_DGRAM, 0))<0) error("slave: Cannot open datagram socket\n"); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 23

24 printf("slave opened UDP socket with descriptor: %d\n",udp_sockfd); /* Fill in the master_udp_addr structure with the address of master*/ bzero((char*) &master_udp_addr, sizeof(master_udp_addr)); master_udp_addr.sin_family = AF_INET; master_udp_addr.sin_addr.s_addr = master_ipaddr; master_udp_addr.sin_port = htons(master_udp_port); /* Bind any local address for us in UDP socket*/ bzero((char *) &slav_udp_addr, sizeof(slav_udp_addr)); slav_udp_addr.sin_family = AF_INET; slav_udp_addr.sin_addr.s_addr = htonl(inaddr_any); slav_udp_addr.sin_port = htons(0); if (bind(udp_sockfd, (struct sockaddr *) &slav_udp_addr, sizeof(slav_udp_addr))<0) error("slave: Cannot bind local address for UDP socket\n"); printf("successfully bound address for UDP socket\n"); /* Send the registration message to the UDP socket */ respond = HERE_I_AM; writeudp(respond, UDP_sockfd, (struct sockaddr *) &master_udp_addr, sizeof(master_udp_addr), TCP_port); /* Open a TCP socket */ if ((TCP_sockfd=socket(AF_INET, SOCK_STREAM, 0))<0) error("slave: Cannot open stream socket\n"); printf("successfully opened TCP socket with descriptor: %d\n",tcp_sockfd); /* Bind our local address for TCP socket so that the master can send commands to us */ bzero((char *) &slav_tcp_addr, sizeof(slav_tcp_addr)); slav_tcp_addr.sin_family = AF_INET; slav_tcp_addr.sin_addr.s_addr = htonl(inaddr_any); slav_tcp_addr.sin_port = htons(atoi(tcp_port)); if (bind(tcp_sockfd, (struct sockaddr *) &slav_tcp_addr, sizeof(slav_tcp_addr))<0) error("slave: Cannot bind local address for TCP socket\n"); printf("successfully bound address for TCP socket\n"); /* Listen to the TCP socket creating a backlog of 5 */ if (listen (TCP_sockfd, 5) <0 ) error("slave: Error listening on TCP port\n"); while(1) /* Set a timeout for listening to the TCP socket of 3 seconds*/ time_expired = set_timeout(tcp_sockfd, 3); if (time_expired == -1) error("slave: Select error\n"); if (time_expired == 1) printf("slave listening on TCP socket...\n"); /* A connection is pending */ mast_length = sizeof(master_tcp_addr); if ((conntcp_sockfd = accept (TCP_sockfd, (struct sockaddr *) &master_tcp_addr, &mast_length)) < 0) error("slave: TCP Accept error"); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 24

25 printf("connected Socket TCP descriptor: %d\n",conntcp_sockfd); printf("connection in TCP socket from host with addr: %s and port: %d\n", inet_ntoa(master_tcp_addr.sin_addr), ntohs(master_tcp_addr.sin_port)); /* Read the master's command from the TCP socket */ bzero(mast_request, MAXMESG); n = read(conntcp_sockfd, mast_request, MAXMESG); if (n < 0) error("slave: Read error from TCP socket"); printf("master request:%s\n", mast_request); /* Do the appropriate actions according to the request */ if (!strncmp (mast_request, "GET", 3)) /* The master has commanded to get a file */ if (slv_status == IDLE) /* Slave is idle. Write OK to the TCP socket */ respond = OK; writetcp(respond, conntcp_sockfd); /* Update slave status to busy */ slv_status = BUSY; /* Extract url from message received from master */ extract_url_from_mesg(mast_request); printf("asked url is: %s \n",url); /* Create a child process with fork to execute wget */ if ((childpid = fork()) < 0) error("slave: Fork error"); if (childpid == 0) /* child process */ /* Close the sockets */ close(tcp_sockfd); close(conntcp_sockfd); /* Define the signal handler for SIGTERM */ signal(sigterm, sigterm_handler); status = 0; /* Exec returns only in failure with a value of -1 */ if (execlp("wget", "", url, NULL) == -1) exit(1); /* Father process. Define handler for signal SIGCHLD issued by child when finished */ signal (SIGCHLD, sigchld_handler); /* The slave is busy. Write LATER */ respond = LATER; writetcp(respond, conntcp_sockfd); if (!strncmp (mast_request, "STATUS", 6)) /* The master has requested the status of the slave*/ writetcp(slv_status, conntcp_sockfd); if (!strncmp (mast_request, "STOP", 4)) Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 25

26 /* Master ordered to stop the current transfer */ respond = OK; writetcp(respond, conntcp_sockfd); if (slv_status == BUSY) /* Kill the child process by sending a SIGTERM signal */ kill(childpid, SIGTERM); /* Ignore signal SIGCHLD issued by child process */ signal (SIGCHLD, SIG_IGN); /* Update slave status to idle */ slv_status = IDLE; /* Write SORRY to the UDP channel */ writeudp(sorry, UDP_sockfd, (struct sockaddr *) &master_udp_addr, sizeof(master_udp_addr), TCP_port); if (!strncmp (mast_request, "EXIT", 4)) /* Master ordered to exit the program */ respond = OK; writetcp(respond, conntcp_sockfd); if (slv_status == BUSY) /* Kill the child process by sending a SIGTERM signal */ kill(childpid, SIGTERM); /* Ignore signal SIGCHLD issued by child process */ signal (SIGCHLD, SIG_IGN); /* Close the connecting socket */ printf("closing TCP connection...\n"); close(conntcp_sockfd); /* end infinite loop */ /* Close the listening socket for TCP and the UDP socket*/ printf("exiting program...\n"); close(tcp_sockfd); close(udp_sockfd); Μ.Π.Σ. Πληροφοριακά Συστήματα Ο.Π.Α. Σελίδα 26

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 1999-2000 ΜΑΘΗΜΑ : ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ : Θ. ΑΠΟΣΤΟΛΟΠΟΥΛΟΣ ΥΛΟΠΟΙΗΣΗ ΕΦΑΡΜΟΓΗΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ CLIENT-SERVER(πελάτη-εξυπηρετητή)

Διαβάστε περισσότερα

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4 Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4 1 Διαχείριση εργασιών fork(), exit(), exec() (βλ 2 ο Φροντ.) Επικοινωνία διεργασιών signals (βλ 2 ο Φροντ.) sockets και client/server,

Διαβάστε περισσότερα

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals Δρ. Απόστολος Γκάμας Διδάσκων 407/80 gkamas@uop.gr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 1 1 UDP vs TCP Το UDP είναι ένα connectionless, μη αξιόπιστο,

Διαβάστε περισσότερα

Δίκτυα Επικοινωνιών ΙΙ: Network Programming TCP Sockets

Δίκτυα Επικοινωνιών ΙΙ: Network Programming TCP Sockets Δίκτυα Επικοινωνιών ΙΙ: Network Programming TCP Sockets Δρ. Απόστολος Γκάμας Διδάσκων 407/80 gkamas@uop.gr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 1 1 Δικτυακός Προγραμματισμός Βασικές Έννοιες: IP addresses,

Διαβάστε περισσότερα

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux Προγραμματισμός με BSD Sockets σε περιβάλλον Linux Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Απρίλιος 2016 Περίγραμμα παρουσίασης 1 Εισαγωγή 2 Δικτυακά

Διαβάστε περισσότερα

4 η ιάλεξη: Signals UDP Sockets

4 η ιάλεξη: Signals UDP Sockets Εργαστήριο ικτύων Υπολογιστών 4 η ιάλεξη: ικτυακός Προγραμματισμός Signals UDP Sockets TCP sockets και signals Όταν σε ένα TCP server κάνουμε fork (γεννάμε διεργασίες-παιδιά servers για να εξυπηρετήσουμε

Διαβάστε περισσότερα

{ int pipe(int fd[ ]) close

{ int pipe(int fd[ ]) close 104 { { { { { { 105 pipe { int pipe(int fd[ ]) { fd[0] fd[1] {, -,,, write read { close { pipe 0-1 106 pipe /* File: pipe_demo.c */ #include /* For printf */ #define READ 0 /* Read end of pipe

Διαβάστε περισσότερα

Ζητήματα Σχεδίασης Λογισμικού Πελάτη

Ζητήματα Σχεδίασης Λογισμικού Πελάτη Ζητήματα Σχεδίασης Λογισμικού Πελάτη Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 1 Αναγνώριση Τοποθεσίας Εξυπηρετητή Για την αναγνώριση της διεύθυνσης και της θύρας ενός εξυπηρετητή ο πελάτης μπορεί να

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:09 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

ιαδικτυακές Εφαρµογές

ιαδικτυακές Εφαρµογές ιαδικτυακές Εφαρµογές µε Java2 Στοιχεία ικτυακής Επικοινωνίας Όροι IP address 32bit αριθµός που χρησιµοποιείται από το Internet Protocol για την παράδοση δεδοµένων στο σωστό υπολογιστή στο δίκτυο. Port

Διαβάστε περισσότερα

Εργαστήριο Δικτύων Υπολογιστών

Εργαστήριο Δικτύων Υπολογιστών Εργαστήριο Δικτύων Υπολογιστών 3 η Διάλεξη: Δικτυακός Προγραμματισμός Unix Socket programming Μοντέλο client-server O βασικός τύπος δικτυακών εφαρμογών είναι client - server H σχέση server και client μπορεί

Διαβάστε περισσότερα

Υποδοχείς (Sockets) Προγραμματισμός II 1

Υποδοχείς (Sockets) Προγραμματισμός II 1 Υποδοχείς (Sockets) Προγραμματισμός II 1 lalis@inf.uth.gr Υποδοχείς Ειδικές δομές διαδιεργασιακής επικοινωνίας Προσπελάζονται μέσω περιγραφέων αρχείων μπορεί να χρησιμοποιηθούν οι read, write, close μπορεί

Διαβάστε περισσότερα

Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή

Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 1 Ταυτόχρονοι και Επαναληπτικοί Εξυπηρετητές Επαναληπτικός εξυπηρετητής: επεξεργάζεται μόνο μία αίτηση τη φορά. Ταυτόχρονος

Διαβάστε περισσότερα

Φροντιςτήριο. Linked-List

Φροντιςτήριο. Linked-List Φροντιςτήριο Linked-List 1 Linked List Μια linked list είναι μια ακολουθία από ςυνδεδεμένουσ κόμβουσ Κάθε κόμβοσ περιέχει τουλάχιςτον Μια πληροφορία (ή ένα struct) Δείκτη ςτον επόμενο κόμβο τησ λίςτασ

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΗΜΙΟΥΡΓΙΑ ΔΙΕΡΓΑΣΙΑΣ WEB-SERVER ΜΕ ΝΗΜΑΤΑ (THREADS) ΣΕ LINUX ΚΑΛΟΠΗΤΑΣ ΚΩΝΣΤΑΝΤΙΝΟΣ - 4190 ΣΒΕΝΤΖΟΥΡΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ - 4086 ΔΗΜΟΚΡΙΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΡΑΚΗΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΞΑΝΘΗΣ

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις Υλικό από: Modern Operating Systems Laboratory Exercises, Shrivakan Mishra Σύνθεση Κ.Γ. Μαργαρίτης, Τμήμα Εφαρμοσμένης Πληροφορικής, Πανεπιστήμιο

Διαβάστε περισσότερα

Δικτυακός Προγραμματισμός (Sockets Programming) Εργαστήριο Γ Εξάμηνο, Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας

Δικτυακός Προγραμματισμός (Sockets Programming) Εργαστήριο Γ Εξάμηνο, Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Δικτυακός (Sockets Programming) Εργαστήριο Γ Εξάμηνο, Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Δήλωση Οι διαφάνειες βασίζονται στα βιβλία: (1) Δικτυακός, Douglas E. Comer, David L. Stevens, Εκδόσεις ΙΩΝ,

Διαβάστε περισσότερα

Επίπεδο Μεταφοράς. (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών Τμήμα Μηχανικών Η/Υ και Πληροφορικής

Επίπεδο Μεταφοράς. (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών Τμήμα Μηχανικών Η/Υ και Πληροφορικής Επίπεδο Μεταφοράς (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών 2014-2015 Τμήμα Μηχανικών Η/Υ και Πληροφορικής Επίπεδο Μεταφοράς(Transport layer) Επίπεδο εφαρμογής (Application layer): Συντονισμός

Διαβάστε περισσότερα

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο 2012-2013 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη Project 2012-2013 Υλοποίηση ενός chat server-client Παράδοση: 7/2/2013

Διαβάστε περισσότερα

(C) 2010 Pearson Education, Inc. All rights reserved.

(C) 2010 Pearson Education, Inc. All rights reserved. Connectionless transmission with datagrams. Connection-oriented transmission is like the telephone system You dial and are given a connection to the telephone of fthe person with whom you wish to communicate.

Διαβάστε περισσότερα

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2 Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4 Φροντιστήριο 2 1 Λειτουργικό Σύστημα -> Multitasking Κάθε διεργασία μπορεί να ειδωθεί σαν μία δέσμη στοιχείων που διατηρούνται από τον πυρήνα

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ Μια ουρά αποτελεί μια δομή δεδομένων στη λογική του First-in

Διαβάστε περισσότερα

HY150a Φροντιστήριο 3 24/11/2017

HY150a Φροντιστήριο 3 24/11/2017 HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr Περιεχόμενα ενότητας Διεργασίες Κλήσεις δημιουργίας και τερματισμού διεργασιών Επικοινωνία διεργασιών μέσω

Διαβάστε περισσότερα

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1 Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας

Διαβάστε περισσότερα

Δικτυακός προγραμματισμός

Δικτυακός προγραμματισμός Δικτυακός προγραμματισμός (hands on) Εργαστήριο Δικτύων Υπολογιστών 2014-2015 Τμήμα Μηχανικών Η/Υ και Πληροφορικής Μοντέλο client-server O βασικός τύπος δικτυακών εφαρμογών είναι client - server H σχέση

Διαβάστε περισσότερα

The Simply Typed Lambda Calculus

The Simply Typed Lambda Calculus Type Inference Instead of writing type annotations, can we use an algorithm to infer what the type annotations should be? That depends on the type system. For simple type systems the answer is yes, and

Διαβάστε περισσότερα

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων Εξάμηνο 7 ο Procedures and Functions Stored procedures and functions are named blocks of code that enable you to group and organize a series of SQL and PL/SQL

Διαβάστε περισσότερα

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service)

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service) Socket *sopen(const int type, const int protocol, const char *host, const char *service) Στην περίπτωση ενός client, δημιουργεί μια νέα σύνδεση και κατασκευάζει μια δομή Socket που σχετίζεται με αυτή Σε

Διαβάστε περισσότερα

Εργαστήριο 5 fork(), exec(), signals

Εργαστήριο 5 fork(), exec(), signals Εργαστήριο 5 fork(), exec(), signals Στο εργαστήριο θα μελετηθούν: Παραδείγματα χρήσης των συναρτήσεων fork και exec Συνάρτηση waitpid Συνάρτηση WIFEXITED Συνάρτηση WEXITSTATUS Παράδειγμα χρήσης σημάτων

Διαβάστε περισσότερα

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εισαγωγή Σκοπός τόσο αυτού του εργαστηρίου, όσο και των εργαστηρίων που ακολουθούν, είναι να γνωρίσουμε τους τρόπους δημιουργίας και διαχείρισης των διεργασιών (processes)

Διαβάστε περισσότερα

SOAP API. https://bulksmsn.gr. Table of Contents

SOAP API. https://bulksmsn.gr. Table of Contents SOAP API https://bulksmsn.gr Table of Contents Send SMS...2 Query SMS...3 Multiple Query SMS...4 Credits...5 Save Contact...5 Delete Contact...7 Delete Message...8 Email: sales@bulksmsn.gr, Τηλ: 211 850

Διαβάστε περισσότερα

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol HTTP Protocol Web and HTTP Βασικά Συστατικά: Web Server Web Browser HTTP Protocol Web Servers (1/2) Ένα πρόγραμμα (λογισμικό) που έχει εγκατασταθεί σε ένα υπολογιστικό σύστημα (έναν ή περισσότερους υπολογιστές)

Διαβάστε περισσότερα

Στο εστιατόριο «ToDokimasesPrinToBgaleisStonKosmo?» έξω από τους δακτυλίους του Κρόνου, οι παραγγελίες γίνονται ηλεκτρονικά.

Στο εστιατόριο «ToDokimasesPrinToBgaleisStonKosmo?» έξω από τους δακτυλίους του Κρόνου, οι παραγγελίες γίνονται ηλεκτρονικά. Διαστημικό εστιατόριο του (Μ)ΑστροΈκτορα Στο εστιατόριο «ToDokimasesPrinToBgaleisStonKosmo?» έξω από τους δακτυλίους του Κρόνου, οι παραγγελίες γίνονται ηλεκτρονικά. Μόλις μια παρέα πελατών κάτσει σε ένα

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

Εγκατάσταση λογισμικού και αναβάθμιση συσκευής Device software installation and software upgrade

Εγκατάσταση λογισμικού και αναβάθμιση συσκευής Device software installation and software upgrade Για να ελέγξετε το λογισμικό που έχει τώρα η συσκευή κάντε κλικ Menu > Options > Device > About Device Versions. Στο πιο κάτω παράδειγμα η συσκευή έχει έκδοση λογισμικού 6.0.0.546 με πλατφόρμα 6.6.0.207.

Διαβάστε περισσότερα

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις

Διαβάστε περισσότερα

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ταξινοµηµένες Λίστες µε δυναµική δέσµευση µνήµης Αναδροµκές συναρτήσεις ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 1 Λίστες

Διαβάστε περισσότερα

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1 Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας

Διαβάστε περισσότερα

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 14-1 Περιεχόμενο

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Εμβέλεια Μεταβλητών Εμβέλεια = το τμήμα του προγράμματος στο οποίο έχει ισχύ ή είναι ορατή η μεταβλητή.

Διαβάστε περισσότερα

Socket Application Programming Interface

Socket Application Programming Interface Socket Application Programming Interface Εισαγωγή Το socket είναι ένας τύπος διεπαφής μεταξύ των προγραμμάτων εφαρμογής και του λογισμικού πρωτοκόλλων Είναι ευρέως διαθέσιμο για να διασφαλίζεται η μεταφερσιμότητα

Διαβάστε περισσότερα

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις

Διαβάστε περισσότερα

ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP

ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP Το FTP (File Transfer Protocol) είναι το εξειδικευμένο πρωτόκολλο μεταφοράς αρχείων στα σύγχρονα δίκτυα δεδομένων όπως το Διαδίκτυο. Δίνει τη δυνατότητα μεταφοράς αρχείων από τον υπολογιστή

Διαβάστε περισσότερα

ΚΥΠΡΙΑΚΟΣ ΣΥΝΔΕΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY 21 ος ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δεύτερος Γύρος - 30 Μαρτίου 2011

ΚΥΠΡΙΑΚΟΣ ΣΥΝΔΕΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY 21 ος ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δεύτερος Γύρος - 30 Μαρτίου 2011 Διάρκεια Διαγωνισμού: 3 ώρες Απαντήστε όλες τις ερωτήσεις Μέγιστο Βάρος (20 Μονάδες) Δίνεται ένα σύνολο από N σφαιρίδια τα οποία δεν έχουν όλα το ίδιο βάρος μεταξύ τους και ένα κουτί που αντέχει μέχρι

Διαβάστε περισσότερα

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Τι είναι οι συνδεδεμένες λίστες (linked lists) Μια Συνδεδεμένη Λίστα (Σ.Λ.) είναι μια διάταξη από κόμβους που μπορούμε να τους διαχειριστούμε δυναμικά. Κάθε

Διαβάστε περισσότερα

Hancock. Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος. ΕΠΛ 428 Προγραμματισμός Συστημάτων

Hancock. Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος. ΕΠΛ 428 Προγραμματισμός Συστημάτων Hancock Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος Χ346339 Τ911778 ΕΠΛ 428 Προγραμματισμός Συστημάτων Ιστορική Αναδρομή Δημιουργήθηκε από την εταιρεία ΑΤ&Τ LAB Αφορμή δημιουργίας: Η ανάγκη για καθαρό και αποδοτικό

Διαβάστε περισσότερα

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 13-1 Περιεχόμενο

Διαβάστε περισσότερα

Σημειώσεις όγδοης εβδομάδας

Σημειώσεις όγδοης εβδομάδας Σημειώσεις όγδοης εβδομάδας Για να την δημιουργία σειριακών αρχείων, χρησιμοποιείται η fopen(filename, w ). Το αρχείο δημιουργείται στον ίδιο φάκελο που τρέχει το εκτελέσιμο πρόγραμμα. Το παρακάτω πρόγραμμα,

Διαβάστε περισσότερα

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook Βήμα 1: Step 1: Βρείτε το βιβλίο που θα θέλατε να αγοράσετε και πατήστε Add to Cart, για να το προσθέσετε στο καλάθι σας. Αυτόματα θα

Διαβάστε περισσότερα

wget --post-file meme.jpg 50.18.252.53:9646

wget --post-file meme.jpg 50.18.252.53:9646 ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Τμήμα Πληροφορικής και Τηλεπικοινωνιών Κ24: Προγραμματισμός Συστήματος Εαρινό Εξάμηνο 2012 4η Προγραμματιστική Εργασία Ημερομηνία Ανακοίνωσης: 30/5/12 Ημερομηνία Υποβολής: 15/7/12 Εισαγωγή

Διαβάστε περισσότερα

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη ( ιάλεξη 3) ιδάσκων: Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 10: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) Σύγκριση Συνδεδεμένων Λιστών με Πίνακες

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes) Προγραμματισμός συστημάτων UNIX/POSIX Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes) Επικοινωνία μεταξύ διεργασιών γονέα-παιδιού Κατά κάποιο τρόπο, θα δημιουργήσουμε ένα τύπο

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής ΕΥ311-Διαδικτυακός και Ταυτόχρονος Προγραμματισμός Εργαστήριο: Παραδείγματα δημιουργίας διεργασιών στο Linux Ένα πρόγραμμα (το στιγμιότυπο της εκτέλεσης του οποίου

Διαβάστε περισσότερα

Εκφωνήσεις ασκήσεων εργαστηρίου 1

Εκφωνήσεις ασκήσεων εργαστηρίου 1 Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου

Διαβάστε περισσότερα

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής Να γραφεί πρόγραμμα το οποίο δέχεται ως είσοδο μια ακολουθία S από n (n 40) ακέραιους αριθμούς και επιστρέφει ως έξοδο δύο ακολουθίες από θετικούς ακέραιους

Διαβάστε περισσότερα

Πρωτόκολλο FTP. Από τα παλαιότερα πρωτόκολλα του ArpaNet Το FTP είναι μια τυποποίηση του TCP/IP Πρόκειται για πρωτόκολο γενικού σκοπού

Πρωτόκολλο FTP. Από τα παλαιότερα πρωτόκολλα του ArpaNet Το FTP είναι μια τυποποίηση του TCP/IP Πρόκειται για πρωτόκολο γενικού σκοπού Μεταφορά αρχείων Πρωτόκολλο FTP Από τα παλαιότερα πρωτόκολλα του ArpaNet Το FTP είναι μια τυποποίηση του TCP/IP Πρόκειται για πρωτόκολο γενικού σκοπού Είναι ανεξάρτητο του λειτουργικού συστήματος και του

Διαβάστε περισσότερα

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΔΙΕΡΓΑΣΙΕΣ +- Με τον όρο διεργασία στο UNIX εννοούμε τη δυναμικη πράξη της

Διαβάστε περισσότερα

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1 Lab 1: C/C++ Pointers and time.h Panayiotis Charalambous 1 Send email to totis@cs.ucy.ac.cy Subject: EPL231-Registration Body: Surname Firstname ID Group A or B? Panayiotis Charalambous 2 Code Guidelines:

Διαβάστε περισσότερα

ύο μηχανισμοί απαιτούνται: 1. Μία μέθοδος για τη δημιουργία διεργασιών

ύο μηχανισμοί απαιτούνται: 1. Μία μέθοδος για τη δημιουργία διεργασιών Υπολογισμός με βάση το πέρασμα μηνυμάτων Προγραμματισμός με πέρασμα μηνυμάτων ύο μηχανισμοί απαιτούνται: 1. Μία μέθοδος για τη δημιουργία διεργασιών που θα εκτελούνται σε διαφορετικούς υπολογιστές. 2.

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals)

Προγραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals) Προγραμματισμός συστημάτων UNIX/POSIX Σήματα (signals) Σήματα (signals) Τα σήματα είναι «διακοπές» λογισμικού (software interrupts) οι οποίες διακόπτουν την κανονική λειτουργία μίας διεργασίας. Προκαλούνται

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI 20 ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΤΕΛΙΚΗΣ ΦΑΣΗΣ Με εξαίρεση το 3ο θέμα, στα 2 πρώτα, υποβλήθηκαν περισσότερες από μία βέλτιστες λύσεις (100% σημείων επιτυχίας). Από αυτές τελείως

Διαβάστε περισσότερα

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12) Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε

Διαβάστε περισσότερα

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1 Δείκτες σε συναρτήσεις Προγραμματισμός II 1 lalis@inf.uth.gr Συνάρτηση Ομάδα εντολών που γράφουμε ξεχωριστά για να υλοποιήσουμε μια συγκεκριμένη λειτουργία για καλύτερη / πιο καθαρή δόμηση του κώδικα για

Διαβάστε περισσότερα

Επεξεργασία Αρχείων Κειµένου

Επεξεργασία Αρχείων Κειµένου Επεξεργασία Αρχείων Κειµένου Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αρχεία Κειµένου Γενικά Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Αρχεία Γενικά

Διαβάστε περισσότερα

Επικοινωνία Client/Server Υποδοχές

Επικοινωνία Client/Server Υποδοχές Επικοινωνία Client/Server Υποδοχές Χάρης Μανιφάβας Τμήμα Εφ. Πληροφορικής & Πολυμέσων ΤΕΙ Κρήτης Επικοινωνία με Υποδοχές 1 Ορισμός των Υποδοχών (sockets) Τα sockets προσφέρουν μια γενικευμένη ικανότητα

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη Εισαγωγικά

Διαβάστε περισσότερα

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

Διαβάστε περισσότερα

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 12: Συνοπτική Παρουσίαση Ανάπτυξης Κώδικα με το Matlab Σαμαράς Νικόλαος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

ΑΤΜ PROJECT ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ 2011-2012. Άννα Τριανταφύλλου ΑΕΜ : 456. επιβλέπων καθηγητής: Μηνάς Δασυγένης

ΑΤΜ PROJECT ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ 2011-2012. Άννα Τριανταφύλλου ΑΕΜ : 456. επιβλέπων καθηγητής: Μηνάς Δασυγένης Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΑΤΜ PROJECT Άννα Τριανταφύλλου ΑΕΜ : 456 επιβλέπων καθηγητής: Μηνάς Δασυγένης Περιεχόμενα 1. 2. 3.

Διαβάστε περισσότερα

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Όλοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα μικρότεροι του 10000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Αν κάπου κάνετε κάποιες υποθέσεις

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr Συναρτήσεις (1/2) Στη C χρησιμοποιούμε συχνά τις συναρτήσεις (functions), οι οποίες είναι ρουτίνες που επαναλαμβάνονται

Διαβάστε περισσότερα

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15) (Κεφάλαιο 2.7 και 12) Αρχεία στην C (Διάλεξη 15) 14-1 Επανάληψη στην Αποθήκευση (Storage) Για να αποθηκεύσουμε δεδομένα από ένα πρόγραμμα, πρέπει να χρησιμοποιήσουμε την Δευτερεύουσα Μνήμη 14-2 Επανάληψη

Διαβάστε περισσότερα

2η Προγραµµατιστική Εργασία

2η Προγραµµατιστική Εργασία Προγραµµατισµός ικτύων (Ε-01) 2η Προγραµµατιστική Εργασία Επέκταση ϐασικής ϐιβλιοθήκης δικτυακού προγραµµατισµού και χρήση της για την υλοποίηση παράλληλου εξυπηρετητή πρωτοκόλλου µεταφοράς αρχείων ιδάσκων

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου 2011 Θέµα 1 (α') 1 - i 2 - ii 3 - iii 4 - iv 5 - v 6 - vi 7 - vii 8 - viii 9 - ix 10 - x Το αποτέλεσµα είναι η αντιστοιχία των

Διαβάστε περισσότερα

Μεθόδων Επίλυσης Προβλημάτων

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 9 Συναρτήσεις Μέρος II Θέματα ιάλεξης Μη- ομημένος

Διαβάστε περισσότερα

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr Η έννοια της διεργασίας ιεργασία (process) είναι ο µηχανισµός εκτέλεσης ενός προγράµµατος σε ένα λειτουργικό σύστηµα. Η διεργασία είναι µια ενεργή

Διαβάστε περισσότερα

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/2006

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/2006 ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/26 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Ολοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα μικρότεροι το 1 εκτός αν ορίζεται διαφορετικά στη διατύπωση

Διαβάστε περισσότερα

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & Άνοιγμα αρχείου μέσα από τo SPIM, διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη (Διάλεξη 3) 1 Μετατροπή χαρακτήρων ASCII σε ακέραιο Ο πιο κάτω κώδικας

Διαβάστε περισσότερα

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο Project Phase 1 ΗΥ - 335α Χειμερινό εξάμηνο 2012-2013 Διδάσκουσα: Παπαδοπούλη Μαρία Υπεύθυνος βοηθός: Σουρλίγκας Μανώλης, surligas@csd.uoc.gr

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές

Διαβάστε περισσότερα

CYTA Cloud Server Set Up Instructions

CYTA Cloud Server Set Up Instructions CYTA Cloud Server Set Up Instructions ΕΛΛΗΝΙΚΑ ENGLISH Initial Set-up Cloud Server To proceed with the initial setup of your Cloud Server first login to the Cyta CloudMarketPlace on https://cloudmarketplace.cyta.com.cy

Διαβάστε περισσότερα

Σημειώσεις έκτης και έβδομης εβδομάδας

Σημειώσεις έκτης και έβδομης εβδομάδας Σημειώσεις έκτης και έβδομης εβδομάδας Προσέξτε το μέγεθος των δύο δομών. Το Node είναι 8 bytes, ενώ το Node1 1 byte. Η διαφορά έγκειται στο ότι η πρώτη δομή περιέχει ακέραιο, τον δείκτη next, οπότε πρέπει

Διαβάστε περισσότερα

Στο εργαστήριο θα μελετηθούν: Διδάσκων: Γιώργος Χατζηπολλάς. Εργαστήριο 2: Εργαλεία Συστήματος UNIX. Ομάδες για παρουσίαση

Στο εργαστήριο θα μελετηθούν: Διδάσκων: Γιώργος Χατζηπολλάς. Εργαστήριο 2: Εργαλεία Συστήματος UNIX. Ομάδες για παρουσίαση Εργαστήριο 2: Εργαλεία Συστήματος UNIX Στο εργαστήριο θα μελετηθούν: Ομάδες για παρουσίαση sed (Stream EDitor) Παραδείγματα χρήσης sed Διδάσκων: Γιώργος Χατζηπολλάς 2-1 Ομάδες Παρουσίασης Group Name Description

Διαβάστε περισσότερα

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input). Κ24: Προγραμματισμός Συστήματος 2η Εργασία Εαρινό Εξάμηνο 2017 Προθεσμία Υποβολής: Κυριακή 30 Απριλίου 2017 Ωρα 23:59 Εισαγωγή στην Εργασία: Ο στόχος της εργασίας αυτής είναι να εξοικειωθείτε με την δημιουργία

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 10-1 Περιεχόμενο Διάλεξης

Διαβάστε περισσότερα

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 2 η Εργαστηριακή Άσκηση: Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία Λειτουργικά

Διαβάστε περισσότερα

UNIX System Programming

UNIX System Programming UNIX System Programming Processes Objectives look at how to program UNIX processes fork( ), wait( ) Overview 1. What is a Process? 2. fork() 3. wait() 4. Process Data 1. What is a Process? A process is

Διαβάστε περισσότερα

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο

Διαβάστε περισσότερα

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 23: Εισαγωγή στην Δικτύωση (Networking) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Διευθύνσεις και Θύρες - Sockets και ServerSockets Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής

Διαβάστε περισσότερα

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Αν κάπου κάνετε κάποιες υποθέσεις να αναφερθούν στη σχετική ερώτηση. Όλα τα αρχεία που αναφέρονται στα προβλήματα βρίσκονται στον ίδιο φάκελο με το εκτελέσιμο

Διαβάστε περισσότερα

Μεθόδων Επίλυσης Προβλημάτων

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 10 Αρχεία στην C Επανάληψη στην Αποθήκευση (Storage)

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX

Προγραμματισμός συστημάτων UNIX/POSIX Προγραμματισμός συστημάτων UNIX/POSIX Προχωρημένη διαδιεργασιακή επικοινωνία: επώνυμοι αγωγοί (FIFOs) ουρές μηνυμάτων (message queues) κοινόχρηστη μνήμη (shared memory) σήματα (signals) Ανάγκη Ότι είδαμε

Διαβάστε περισσότερα

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y)

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y) D4 2 2. (pixel) 2 ( ) M N (x, y) (x, y ) ( )f(x, y) j N- i j i f(i, j) M-. ij f(i, j) 8 2 8 = 256, 2 2 f(x, y) 3,, R(x, y), G(x, y), B(x, y) 256 2 2.2 ( ) JPEG (Joint Photographic Experts Group), GIF (Graphics

Διαβάστε περισσότερα