Η συνάρτηση msgrcv θα αποτύχει εάν: [E2BIG] Η τιμή του mtext είναι μεγαλύτερη από msgsz και (msgflg & MSG_NOERROR) είναι 0. [EACCES]
Μπλοκάρει το Msgrcv;
Οι συναρτήσεις msgsnd και msgrcv μπορούν να εκτελεστούν είτε ως λειτουργίες αποκλεισμού είτε ως μη αποκλεισμού. Οι λειτουργίες μη αποκλεισμού επιτρέπουν την ασύγχρονη μεταφορά μηνυμάτων -- η διαδικασία δεν αναστέλλεται ως αποτέλεσμα αποστολής ή λήψης μηνύματος.
Το msgrcv αφαιρεί το μήνυμα από την ουρά;
Η κλήση συστήματος msgrcv αφαιρεί ένα μήνυμα από την ουρά που καθορίζεται από το msqid και το τοποθετεί στο buffer στο οποίο δείχνει το msgp. Το όρισμα msgsz καθορίζει το μέγιστο μέγεθος σε byte για το μέλος mtext της δομής στο οποίο επισημαίνεται το όρισμα msgp.
Πώς λειτουργεί το msgrcv;
Η συνάρτηση msgrcv διαβάζει ένα μήνυμα από την ουρά μηνυμάτων που καθορίζεται από την παράμετρο msqid και το τοποθετεί στην προσωρινή μνήμη που ορίζει ο χρήστης που υποδεικνύεται από την παράμετρο msgp. Η παράμετρος msgp οδηγεί σε ένα buffer που ορίζεται από το χρήστη που πρέπει να περιέχει τα ακόλουθα: Ένα πεδίο τύπου long int που καθορίζει τον τύπο του μηνύματος.
Τι επιστρέφει το msgrcv;
RETURN VALUE
Με την επιτυχή ολοκλήρωση, το msgrcv επιστρέφει μια τιμή ίση με τον αριθμό των byte που έχουν τοποθετηθεί στο buffer mtext. Διαφορετικά, δεν θα ληφθεί κανένα μήνυμα, το msgrcv θα επιστρέψει (ssize_t)-1 και το errno θα οριστεί για να υποδεικνύει το σφάλμα.