Δομές (Specific Structures)
Η δομή (structure) στην C επιτρέπει τη δημιουργία σύνθετων τύπων δεδομένων που μπορούν να περιέχουν πολλές μεταβλητές διαφορετικών τύπων, π.χ., ακέραιους, πραγματικούς αριθμούς, χαρακτήρες κ.λπ. Αυτό είναι χρήσιμο για την αναπαράσταση πραγματικών οντοτήτων, όπως αντικείμενα, άτομα ή αρχεία.
Stuct tm
Χρησιμοποιείται για την αναπαράσταση ημερομηνιών και ωρών.Η δομή struct tm ορίζεται στο αρχείο κεφαλίδας και έχει την εξής μορφή.
struct tm {
int tm_sec; // Αναπαριστά τα δευτερόλεπτα (0-59)
int tm_min; // Αναπαριστά τα λεπτά (0-59)
int tm_hour; // Αναπαριστά τις ώρες (0-23)
int tm_mday; // Αναπαριστά την ημέρα του μήνα (1-31)
int tm_mon; // Αναπαριστά τον μήνα (0-11, 0 = Ιανουάριος)
int tm_year; // Αναπαριστά το έτος (έτος - 1900)
int tm_wday; // Αναπαριστά την ημέρα της εβδομάδας(0-6, 0 = Κυριακή)
int tm_yday; // Αναπαριστά την ημέρα του έτους (0-365)
int tm_isdst; // Aναπαριστά την ένδειξη θερινής ώρας
// (1 = θερινή ώρα, 0 = μη θερινή ώρα, -1 = άγνωστο)
}; Stuct sockaddr
Η δομή sockaddr είναι μια βασική δομή που χρησιμοποιείται στην προγραμματιστική γλώσσα C για την προγραμματισμό των sockets. Ορίζεται στο αρχείο κεφαλίδας και χρησιμοποιείται για να αναπαραστήσει μια γενική διεύθυνση socket. Η δομή struct sockaddr είναι :
- sa_family: καθορίζει την οικογένεια της διεύθυνσης, που καθορίζει τη μορφή των δεδομένων της διεύθυνσης
- sa_data: είναι ένας πίνακας που περιέχει τις πραγματικές πληροφορίες της διεύθυνσης. Το μέγεθος του πίνακα sa_data μπορεί να ποικίλει ανάλογα με την οικογένεια της διεύθυνσης που χρησιμοποιείται.
struct sockaddr {
unsigned short sa_family;
char sa_data[14];
};Stuct sockaddr_in
Η δομή sockaddr_in χρησιμοποιείται στη γλώσσα προγραμματισμού C για να αναπαραστήσει μια διεύθυνση IPv4 για τη χρήση με sockets. Η δομή struct timeval ορίζεται στο αρχείο κεφαλίδας και έχει την εξής μορφή:
- sin_family: Η οικογένεια της διεύθυνσης, που συνήθως είναι AF_INET για IPv4.
- sin_port: Ο αριθμός θύρας στον οποίο ο ακροατής ή ο προορισμός του socket είναι συνδεδεμένος. Πρέπει να μετατραπεί στην αναγνωριστική μορφή δικτύου (network byte order) χρησιμοποιώντας τη συνάρτηση htons().
- sin_addr: Η διεύθυνση IPv4. Είναι μια δομή τύπου struct in_addr που περιέχει την αριθμητική αναπαράσταση της διεύθυνσης.
struct sockaddr_in {
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};Stuct sockaddr_in6
Χρησιμοποιείται για την αναπαράσταση διευθύνσεων IPv6.
Η δομή sockaddr_in6 ορίζεται στο αρχείο κεφαλίδας #include και έχει την εξής μορφή:
- sin6_len: Το μέγεθος της δομής sockaddr_in6 σε bytes.
- sin6_family: Η οικογένεια της διεύθυνσης (π.χ., AF_INET6 για το IPv6).
- sin6_port: Ο αριθμός θύρας που αντιστοιχεί στη διεύθυνση.
- sin6_flowinfo: Πληροφορίες ροής για τη διεύθυνση.
- sin6_addr: Δομή in6_addr που περιέχει τη διεύθυνση IPv6.
- sin6_scope_id: Ταυτότητα πεδίου εμβέλειας που χρησιμοποιείται για την αναγνώριση της εμβέλειας της διεύθυνσης.
struct sockaddr_in6 {
sa_family_t sin6_family; // Οικογένεια διεύθυνσης (IPv6)
in_port_t sin6_port; // Αριθμός θύρας (σε μορφή δικτύου)
uint32_t sin6_flowinfo; // Πληροφορίες ροής (για την εξυπηρέτηση QoS)
struct in6_addr sin6_addr; // Διεύθυνση IPv6
uint32_t sin6_scope_id; // Αναγνωριστικό εύρους (για περιοχή εύρους)
}; Stuct stat
Η δομή struct stat περιέχει πληροφορίες για ένα αρχείο, όπως το αναγνωριστικό συσκευής, ο αριθμός inode, ο τύπος αρχείου και τα δικαιώματα πρόσβασης, το μέγεθος του αρχείου, ο χρήστης-κατόχος, η ομάδα-κατόχος, ο χρόνος τελευταίας πρόσβασης, ο χρόνος τελευταίας τροποποίησης και ο χρόνος τελευταίας αλλαγής των μεταδεδομένων. Οι συγκεκριμένες πληροφορίες εξαρτώνται από το λειτουργικό σύστημα και το σύστημα αρχείων που χρησιμοποιείται.
Η δομή struct stat ορίζεται στο αρχείο κεφαλίδας <sys/stat.h> και έχει την εξής μορφή:
- st_dev: ID της συσκευής που περιέχει το αρχείο.
- st_ino: Αριθμός inode του αρχείου.
- st_mode: Προστασία (δικαιώματα πρόσβασης) του αρχείου.
- st_nlink: Αριθμός συμβολικών συνδέσμων προς το αρχείο.
- st_uid: Αναγνωριστικό χρήστη του κατόχου.
- st_gid: Αναγνωριστικό ομάδας του κατόχου.
- st_rdev: ID συσκευής για ειδικά αρχεία (π.χ., χαρακτήρας ή μπλοκ συσκευή).
- st_size: Συνολικό μέγεθος του αρχείου σε bytes.
- st_blksize: Μέγεθος μπλοκ για επικοινωνία με το αρχείο.
- st_blocks: Αριθμός εκχωρημένων μπλοκ για το αρχείο.
- st_atime: Χρόνος τελευταίας πρόσβασης στο αρχείο.
- st_mtime: Χρόνος τελευταίας τροποποίησης του αρχείου.
- st_ctime: Χρόνος τελευταίας αλλαγής κατάστασης του αρχείου.
struct stat {
dev_t st_dev; // Αναγνωριστικό συσκευής
ino_t st_ino; // Αριθμός inode
mode_t st_mode; // Λειτουργική λειτουργία (π.χ. δικαιώματα πρόσβασης)
nlink_t st_nlink; // Αριθμός συνδέσεων
uid_t st_uid; // User ID του κατόχου
gid_t st_gid; // Group ID του κατόχου
dev_t st_rdev; // Αναγνωριστικό συσκευής για ειδικά αρχεία
off_t st_size; // Μέγεθος αρχείου σε bytes
blksize_t st_blksize; // Μέγεθος μπλοκ διαμόρφωσης αρχείου σε bytes
blkcnt_t st_blocks; // Συνολικός αριθμός μπλοκ αρχείου
time_t st_atime; // Χρόνος τελευταίας πρόσβασης
time_t st_mtime; // Χρόνος τελευταίας τροποποίησης
time_t st_ctime; // Χρόνος τελευταίας αλλαγής δομής αρχείου
};Stuct dirent
Οι δομές struct dirent χρησιμοποιούνται συνήθως με συναρτήσεις όπως η readdir() για την ανάγνωση των καταχωρίσιμων αρχείων ενός καταλόγου. Με τη χρήση της δομής struct dirent, μπορείτε να αποκτήσετε πρόσβαση σε πληροφορίες όπως τα ονόματα αρχείων και οι τύποι αρχείων που υπάρχουν σε έναν κατάλογο.
Η δομή struct dirent ορίζεται στο αρχείο κεφαλίδας και έχει την εξής μορφή:
- d_ino: Ο αριθμός inode του αρχείου.
- d_off: Το offset (μετατόπιση) στον κατάλογο για αυτό το καταχωρίσιμο αρχείο.
- d_reclen: Το μήκος της καταχώρισης του αρχείου.
struct dirent {
ino_t d_ino; // Αριθμός inode του αρχείου
off_t d_off; // Μετατόπιση για τον επόμενο καταλόγο (όχι πάντα υποστηριζόμενη)
unsigned short d_reclen; // Μήκος εγγραφής
unsigned char d_type; // Τύπος αρχείου
char d_name[]; // Όνομα αρχείου
};Stuct flock
Η δομή flock χρησιμοποιείται στην γλώσσα προγραμματισμού C για τον έλεγχο κλειδώματος αρχείων (file locking). Χρησιμοποιείται για να εφαρμοστεί κλείδωμα σε ένα αρχείο ή να ελευθερωθεί κλείδωμα που ήδη υπάρχει. Η δομή flock ορίζεται στο αρχείο κεφαλίδας .
- l_type: Ο τύπος του κλειδώματος. Μπορεί να είναι μία από τις ακόλουθες τιμές:
- F_RDLCK: Κλείδωμα για ανάγνωση (shared lock).
- F_WRLCK: Κλείδωμα για εγγραφή (exclusive lock).
- F_UNLCK: Απελευθέρωση του κλειδώματος.
- l_whence: Η αφετηρία της μετατόπισης (offset) για τον υπολογισμό των πεδίων l_start και l_len. Μπορεί να είναι μία από τις ακόλουθες τιμές:
- SEEK_SET: Από την αρχή του αρχείου.
- SEEK_CUR: Από την τρέχουσα θέση στο αρχείο.
- SEEK_END: Από το τέλος του αρχείου.
- l_start: Η αρχή της περιοχής που θα κλειδωθεί (offset) από την αφετηρία.
- l_len: Το μήκος της περιοχής που θα κλειδωθεί (length) από την αφετηρία.
- l_pid: Το αναγνωριστικό διεργασίας (PID) που κατέχει το κλείδωμα. Αυτό το πεδίο γεμίζεται από το σύστημα όταν το κλείδωμα εφαρμόζεται.
struct flock {
short l_type; // Τύπος κλειδώματος (F_RDLCK, F_WRLCK, F_UNLCK)
short l_whence; // Αναφορά της μετατόπισης (SEEK_SET, SEEK_CUR, SEEK_END)
off_t l_start; // Αρχή της περιοχής προς κλείδωμα
off_t l_len; // Μέγεθος της περιοχής προς κλείδωμα
pid_t l_pid; // ID διεργασίας που κρατά το κλείδωμα (αν υπάρχει)
};Struct sigaction
Η δομή struct sigaction είναι μια προκαθορισμένη (built-in) δομή στη γλώσσα προγραμματισμού C που χρησιμοποιείται για την καθορισμό της συμπεριφοράς ενός προγράμματος κατά τη λήψη σήματος (signal).
Η δομή struct sigaction ορίζεται στο αρχείο κεφαλίδας και έχει την εξής μορφή:
- sa_handler: Δείκτης σε μια συνάρτηση χειρισμού σήματος, η οποία εκτελείται όταν λαμβάνεται το σήμα. Αυτό το μέλος χρησιμοποιείται κατά κύριο λόγο για την υποστήριξη των παλαιών μορφών χειρισμού σήματος.
- sa_sigaction: Δείκτης σε μια συνάρτηση χειρισμού σήματος με επιπλέον πληροφορίες.
- sa_mask: Ένα σύνολο σημάτων (sigset_t) που απενεργοποιούνται προσωρινά κατά την εκτέλεση της συνάρτησης χειρισμού. Αυτό εξασφαλίζει ότι το σήμα δεν θα επαναληφθεί κατά τη διάρκεια της εκτέλεσης της συνάρτησης.
- sa_flags: Επιπλέον σημαίες που ελέγχουν τη συμπεριφορά της διαχείρισης σήματος.
- SA_RESTART
- SA_NOCLDSTOP
- SA_NODEFER
- SA_RESETHAND
- SA_SIGINFO
- sa_restorer: Δείκτης σε συνάρτηση αποκατάστασης (restorer function). Αυτό το μέλος χρησιμοποιείται κατά κύριο λόγο σε παλαιότερα συστήμα
struct sigaction {
void (*sa_handler)(int); // Δείκτης σε συνάρτηση χειρισμού σήματος
void (*sa_sigaction)(int, siginfo_t *, void *); // Δείκτης σε συνάρτηση χειρισμού σήματος με περισσότερες πληροφορίες
sigset_t sa_mask; // Σήματα που εμποδίζονται κατά την εκτέλεση του χειριστή
int sa_flags; // Πρόσθετες σημαίες (flags)
void (*sa_restorer)(void); // Ανακατασκευαστής στοιχείων αποθήκευσης στη στοίβα (deprecated)
};