Στο συγκεκριμένο φάκελό βρίσκονται τα κύρια προγράμματα A.c και B.c καθώς και ενα folder SenderReceiver που περιέχει το SenderReceiver.c καθώς και το sender_receiver.h τα οποία αρχεία περιέχουν τα βασικά κοινά των κυρίων προγραμμάτων, τις υλοποιήσεις των send_messages() και receive_messages() καθώς και τα δυο struct,τέλος υπάρχει ενα makefile με το οποιο μπορείτε να κάνετε compile και clean των αρχείων.Ολα τα αλλα files υπάρχουν για τα παραδείγματα παρακάτω.
Τρέχοντας απλα τα δυο προγράμματα ([./Α] και [./B] [ΠΑΡΑΔΕΙΓΜΑ 1]) δημιουργούμε μια εφαρμογή τυπου "live chatting".Ο΄,τι γράψει ο χρήστης του προγράμματος Α εμφανίζεται στην οθόνη του χρήστη του προγράμματος Β και αντίστροφα! Αυτό θα συνεχίσει να γίνεται μέχρι ένας απο τους δυο χρήστης είτε να στείλει την συμβολοσειρά "#BYE#"(έπειτα απο αναφορά του κυρίου Πασχάλη θεωρούμε οτι ο χρήστης θα στείλει μονο την συμβολοσειρά #BYE# για τερματισμό του προγράμματος και δεν υπάρχει περίπτωση να την στείλει μαζί με αλλο τεμάχιο), είτε ένα από τα δύο προγράμματα φτάσει στο τέλος της ανάγνωσης του αρχείου ΑΚΑ έχει διάβασε EOF, αρα δεν δέχεται αλλα στοιχεία (αν του έχει δωθεί με ανακατεύθυνση να διαβάσει input απο ενα αρχείο πχ[./A <inputA.txt][ΠΑΡΑΔΕΙΓΜΑ 2]) ή είτε ο χρήστης ο ίδιος δηλώσει οτι δεν θα στείλει αλλα στοιχεία δίνοντας του αυτος EOF(ΑΚΑ πατώντας ^D κατά την εκτέλεση του πρόγραμματος[ΠΑΡΑΔΕΙΓΜΑ 3]),στις δυο τελευταίες περιπτώσεις ισχυει οτι EOF == "#BYE#"(δηλαδή αν δεν έχει άλλο να διαβάσει συμπεριφέρεται σαν να διαβασε απο τον χρήστη #BYE#).Αρα αν εχουμε μια απο αυτές τις περιπτώσεις τα δύο προγράμματα εμφανίζουν τα στατιστικά της"συζήτησης" μεταξύ του Α-Β και σταματάνε την εκτέλεση τους. Μπορούμε επίσης να τρέξουμε τα δύο προγράμματα δίνοντας τους μαζί κάποιο όρισμα, συγκεκριμένα το όρισμα πρέπει να είναι ένα file στο οποίο το αντίστοιχο πρόγραμμα που θα το δεχτεί θα πάει και θα γράψει εκεί μέσα όλα τα messages που δέχτηκε απο την αλλη διεργασία (πχ [./A exampleoutput.txt][ΠΑΡΑΔΕΙΓΜΑ 4]).Τι πετυχαίνουμε με αυτό;Μπορούμε εύκολα και γρήγορα να χωρίσουμε τα μηνύματα που δέχτηκε μια διεργασία απο την άλλη, με τα τελικά στατιστικά της εκτέλεσης τους. Αυτο γίνεται ακομα πιο καθαρό τρέχοντας το πρόγραμμα με ένα όρισμα και κάνοντας παράλληλα ανακατεύθυνση(πχ [./A messageoutput.txt >statisticsoutput.txt][ΠΑΡΑΔΕΙΓΜΑ 5]). Ακολουθούν τα αντίστοιχα παραδείγματα που διαβάσατε και κάποια ακόμα επιδιώκοντας κάποια ακόμα χαρακτηριστικά των προγραμμάτων. (ΣΗΜΕΙΩΣΗ:επειδή κάποια παράδειγμα (πχ όταν υπάρξει τερματισμός με υποβολή #BYE#)μπορεί να μη βρίσκονται παράλληλα τα μηνύματα των δυο διεργασιών, για την ευκολότερη ανάγνωση του παραδείγματος, έχει γινει σε κάποια σημεία μετακίνηση των τελικών prints(ΑΚΑ έχουν προστεθεί/αφαιρεθεί σε κάποια σημεία κάποια '\n'))
ΠΑΡΑΔΕΙΓΜΑ 1:
$ ./A $ ./B
====================================== ======================================
==========type #BYE# to exit========== ==========type #BYE# to exit==========
====================================== ======================================
Hey what's up? A : Hey what's up?
B : hey I am good how are you? hey I am good how are you?
I am fine too pal, just finished a project for my uni!!! A : I am fine too pal, just finished a project for my uni!!!
B : WOW happy to hear it man! WOW happy to hear it man!
B : Now you are mentioning that... Now you are mentioning that...
B : I HAVE A PROJECT TO FINISH TOOO!!!! I HAVE A PROJECT TO FINISH TOOO!!!!
B : SEEE YAAA SEEE YAAA
Bye! A : Bye!
#BYE#
====================================== ======================================
= Messages sent : 3 = Messages sent : 5
= Messages received : 5 = Messages received : 3
====================================== ======================================
====================================== ======================================
= Chunks sent : 6 = Chunks sent : 10
= Chunks received : 10 = Chunks received : 6
====================================== ======================================
====================================== ======================================
= Chunks per message sent : 2.000000 = Chunks per message sent : 2.000000
= Chunks per message received : 2.000000 = Chunks per message received : 2.000000
====================================== ======================================
====================================== ======================================
= Average microseconds needed for sent chunk to be printed : 138 = Average microseconds needed for sent chunk to be printed : 121
====================================== ======================================
ΠΑΡΑΔΕΙΓΜΑ 2(Το inputA.txt υπαρχει σαν αρχειο):
$ ./A <inputA.txt $ ./B
====================================== ======================================
==========type #BYE# to exit========== ==========type #BYE# to exit==========
====================================== ======================================
A : Hey proccess B!
A : Today I am going to count to you up to 15!
A : 1
A : 12
A : 123
A : 1234
A : 12345
A : 123456
A : 1234567
A : 12345678
A : 123456789
A : 1234567890
A : (0 == 10)
A : 12345678901
A : 123456789012
A : 1234567890123
A : 12345678901234
A : 123456789012345
A : That's all for Today!Aren't you impressed?
====================================== ======================================
= Messages sent : 19 = Messages sent : 0
= Messages received : 0 = Messages received : 19
====================================== ======================================
====================================== ======================================
= Chunks sent : 25 = Chunks sent : 0
= Chunks received : 0 = Chunks received : 25
====================================== ======================================
====================================== ======================================
= Chunks per message sent : 1.315789 = Chunks per message sent : 0.000000
= Chunks per message received : 0.000000 = Chunks per message received : 1.315789
====================================== ======================================
====================================== ======================================
= Average microseconds needed for sent chunk to be printed : 22732 ===NO MESSAGE HAVE BEEN SENT WITH B===
====================================== ======================================
Εδω μας δίνεται η δυνατότητα να σχολιάσουμε πώς το πρόγραμμα ενώ λαμβάνει μονο 15 χαρακτήρες την φορά καθε ενα μήνυμα που λαμβάνει απο το χρήστη το διαχειρίζεται σαν ενα μήνυμα και ετσι το τυπώνει.Αν δεν γινόταν αύτη η αντιμετώπιση, το πρόγραμμα θα μπορούσε να εκτυπώσει μήνυμα της ακόλουθης μορφής:
(παραμένουν το ιδιο)
A : 12345678901234
A : 123456789012345A :
A : That's all for A : Today!Aren't yoA : u impressed?
(παραμένουν το ιδιο)
καθιστώντας το λιγότερο ελκυστικό για τον χρήστη.H αποφυγη του παραπάνω φαινομενου επιτυγχάνεται ελέγχοντας αν το τεμαχιο που λάβουμε είναι κομμάτι ενός μεγαλύτερου μηνύματος ή οχι, ή αν είναι κομμάτι και είναι το τελευταίο, τοτε καθοριζει τη ληξη του μηνύματος και κανουμε μονο τοτε τις ενεργειες που θα ειχαμε κανει αν ειχαμε λαβει ενα μονο τεμαχιο εξ΄αρχης.
ΠΑΡΑΔΕΙΓΜΑ 3:
$ ./A $ ./B
====================================== ======================================
==========type #BYE# to exit========== ==========type #BYE# to exit==========
====================================== ======================================
See yaaaa A : See yaaaa
====================================== ======================================
= Messages sent : 1 = Messages sent : 0
= Messages received : 0 = Messages received : 1
====================================== ======================================
====================================== ======================================
= Chunks sent : 1 = Chunks sent : 0
= Chunks received : 0 = Chunks received : 1
====================================== ======================================
====================================== ======================================
= Chunks per message sent : 1.000000 = Chunks per message sent : 0.000000
= Chunks per message received : 0.000000 = Chunks per message received : 1.000000
====================================== ======================================
====================================== ======================================
= Average microseconds needed for sent chunk to be printed : 337 ===NO MESSAGE HAVE BEEN SENT WITH B===
====================================== ======================================
ΠΑΡΑΔΕΙΓΜΑ 4(Το exampleoutput.txt υπαρχει σαν αρχειο με τα αντίστοιχα αποτελεσματα):
$ ./A output.txt $ ./B
====================================== ======================================
==========type #BYE# to exit========== ==========type #BYE# to exit==========
====================================== ======================================
Hey! A : Hey!
Hey I am writing directly into the exampleoutput.txt
You can not see what I am doing muhahaha
#BYE#
====================================== ======================================
= Messages sent : 1 = Messages sent : 2
= Messages received : 2 = Messages received : 1
====================================== ======================================
====================================== ======================================
= Chunks sent : 1 = Chunks sent : 7
= Chunks received : 7 = Chunks received : 1
====================================== ======================================
====================================== ======================================
= Chunks per message sent : 1.000000 = Chunks per message sent : 3.500000
= Chunks per message received : 3.500000 = Chunks per message received : 1.000000
====================================== ======================================
====================================== ======================================
= Average microseconds needed for sent chunk to be printed : 354 = Average microseconds needed for sent chunk to be printed : 49
====================================== ======================================
ΠΑΡΑΔΕΙΓΜΑ 5(Για την καλυτερη αναγνωση αλλαξα τις θεσεις του Α με του Β)
$ ./B $ ./A messageoutput.txt >statisticsoutput.txt
======================================
==========type #BYE# to exit==========
======================================
Hello there?
A : Hi! Hi!
oh there you are!!!
I can not see you?!
A : oh yeah thats because of the redirection oh yeah thats because of the redirection
A : cool isn't it? cool isn't it?
#BYE#
======================================
= Messages sent : 3
= Messages received : 3
======================================
======================================
= Chunks sent : 5
= Chunks received : 5
======================================
======================================
= Chunks per message sent : 1.666667
= Chunks per message received : 1.666667
======================================
======================================
= Average microseconds needed for sent chunk to be printed : 59
======================================
Μπορούμε τωρα λοιπόν να δούμε ξεχωριστά τα messages που έλαβε ο Α και τα στατιστικά του στα αντίστοιχα messageoutput.txt και statisticsoutput.txt αρχεία.
Υπαρχουν δυο ετοιμα inputA/B.txt αρχεια για περαιτέρω πειραματισμό, απλα πατατε make και τρεχετε με παρομοιο τροπο οπως τα παραδείγματα, τα Α και Β προγράμματα. Αυτή ήταν μια σύντομη παρουσίαση της εργασιας μου κι των βασικών λειτουργιών της. Καλυτερη εξήγηση τους θα βρείτε πάνω στον κώδικα με μορφη σχολίων οπου θα μπορεσετε καλυτερα να κατανοήσετε επειτα απο αυτη την εισαγωγη. Τελειώνοντας να σας ευχηθώ καλα Χριστούγεννα και καλη πρωτοχρονιά !!! *<]:{)