ioctl() και πιθανή ανάγκη ανανέωσης των man pages
Stathis Kamperis
eu_kamper at yahoo.gr
Tue Jun 20 14:37:04 EEST 2006
Χαιρετώ την όμορφη παρέα :)
Φτιάχνω με ένα φίλο μου μια συσκευή η οποία θα επικοινωνεί με το 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(), πώς μπορώ να κάνω την δουλειά μου;
2) Χρειάζεται πράγματι ανανέωση η man page του tty_ioctl ή εγώ τα έχω
μπερδέψει; Αν ναι, πού μπορώ να απευθυνθώ;
Ευχαριστώ πολύ :)
Φιλικά,
Στάθης
-----------------------------------------------
[1] http://www.linuxjournal.com/node/7000/print
__________________________________________________
Χρησιμοποιείτε Yahoo!;
Βαρεθήκατε τα ενοχλητικά μηνύματα (spam); Το Yahoo! Mail διαθέτει την καλύτερη δυνατή προστασία κατά των ενοχλητικών μηνυμάτων
http://mail.yahoo.gr
More information about the Linux-greek-users
mailing list