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