[python] ioctl() v céčku funguje, v Pythonu selže

Jan Martinek honza na dp.fce.vutbr.cz
Středa Březen 22 14:32:36 CET 2006


Jan Martinek wrote:
> Ahoj,
> 
> když v Pythonu napíšu tohle,
> 
> import tty, os, fcntl
> fd = os.open('/dev/ttyS0', os.O_RDWR | os.O_SYNC)
> fcntl.ioctl(fd, tty.TIOCMBIC, tty.TIOCM_DTR)
> 
> tak to vyvolá výjimku
> IOError: [Errno 14] Bad address
> 

Aha, už vím. Musí se to předtím spakovat:

fcntl.ioctl(fd, tty.TIOCMBIC, struct.pack('I', tty.TIOCM_DTR))

(v Céčku se předává pointer). Spletl jsem si to s tímhle:

fcntl.ioctl(fd, tty.TIOCMIWAIT, tty.TIOCM_CTS)

což se naopak nepakuje, protože se v Céčku udávají přímo flagy, nikoli 
pointer na ně.


Další informace o konferenci Python