ioctl() και πιθανή ανάγκη ανανέωσης των man pages
Giorgos Keramidas
keramida at ceid.upatras.gr
Tue Jun 20 15:28:11 EEST 2006
On 2006-06-20 14:37, Stathis Kamperis <eu_kamper at yahoo.gr> wrote:
> Χαιρετώ την όμορφη παρέα :)
>
> Φτιάχνω με ένα φίλο μου μια συσκευή η οποία θα επικοινωνεί με
> το PC μέσω της σειριακής θύρας (RS-232). Στα πλαίσια αυτού του
> εγχειρήματος χρειάζεται να διαβάζω τα σήματα στα διάφορα pins
> της σειριακής (π.χ. DTR, κλπ). Ψάχνοντας στο google είδα πως
> αυτό γίνεται με την βοήθεια της ioctl(). Αντιγράφω το
> παράδειγμα από την man page: tty_ioctl (4).
>
> EXAMPLE
> Check the condition of DTR on the serial port.
>
> #include <termios.h>
> #include <fcntl.h>
> #include <sys/ioctl.h>
>
> main() {
> int fd, serial;
>
> fd = open("/dev/ttyS0", O_RDONLY);
> ioctl(fd, TIOCMGET, &serial);
> if (serial & TIOCM_DTR)
> puts("TIOCM_DTR is not set");
> else
> puts("TIOCM_DTR is set");
> close(fd);
> }
>
> Αν προσπαθήσετε να τρέξετε τον παραπάνω κώδικα, αυτός δεν θα
> δουλέψει (σωστά). Η ioctl() θα επιστρέψει -1 και η μεταβλητή
> errno θα πάρει την τιμή EINVAL. Ότι δηλαδή το όρισμα TIOCMGET
> δεν είναι έγκυρο.
>
> Με λίγο παραπάνω ψάξιμο στο google[1] διάβασα ότι από τον
> πυρήνα 2.5.x και εξής, κάποιες ioctls έχουν αφαιρεθεί, μεταξύ
> των οποίων και η TIOCMGET. Ωστόσο η αντίστοιχη man page δεν
> φαίνεται να έχει ενημερωθεί και εξακολουθεί να αναφέρει το
> TIOCMGET ως όρισμα της ioctl():
>
> Modem control
> TIOCMGET int *argp
> get the status of modem bits.
>
> Οι ερωτήσεις μου:
>
> 1) Εφόσον πλέον δεν υποστηρίζεται η λειτουργία TIOCMGET μέσω
> της ioctl(), πώς μπορώ να κάνω την δουλειά μου;
Διαβάζοντας το source του πυρήνα.
Εναλλακτικά, βάζεις κανένα σοβαρό λειτουργικό, του οποίου τα
manpages δεν είναι 8000 patchlevels πίσω.
> 2) Χρειάζεται πράγματι ανανέωση η man page του tty_ioctl ή εγώ
> τα έχω μπερδέψει; Αν ναι, πού μπορώ να απευθυνθώ;
Ναι. Όπως και το 70% των Linux manpages που δεν είναι άδεια
placeholders του στυλ:
"Κάποια μέρα πρέπει να γράψουμε κι αυτό το manpage".
Ποιο πακέτο από manpages έχεις στημένο στο σύστημά σου; Ποιός
είναι ο packager του πακέτου; Γιατί να χάνει χρόνο κανείς με
τέτοιες μπούρδες όταν υπάρχουν λειτουργικά συστήματα που οι
developers αλληλοελέγχονται όταν γίνεται commit κώδικας χωρίς να
ενημερώνεται το manpage;
κλπ.
More information about the Linux-greek-users
mailing list