Первое, что вы должны сделать, это проверить значение errno
. Вызов open
, если он возвращает -1, установит errno
в значение, указывающее, что является реальной проблемой.
И, исходя из вашего комментария, что это Permission denied
и ваша программа работает при запуске под sudo
, это, вероятно, проблема с правами доступа к файлу устройства /dev/ttyS0
.
В Debian 6 возникает похожая проблема:
pax> ls -al /dev/ttyS0
crw-rw---- 1 root dialout 4, 64 Mar 23 21:00 /dev/ttyS0
pax> echo xyzzy >/dev/ttyS0
bash: /dev/ttyS0: Permission denied
Может потребоваться добавить вашего пользователя в группу dialout
(или другую группу, в зависимости от того, насколько далеко Ubuntu отклоняется от моего любимого Debian), чтобы получить доступ:
pax> id -Gn
pax cdrom floppy audio dip video plugdev netdev bluetooth scanner
pax> sudo adduser pax dialout
[sudo] password for pax:
Adding user pax to group dialout
Done.
<< Restart done here to ensure new group picked up >>
pax> id -Gn
pax dialout cdrom floppy audio dip video plugdev netdev bluetooth scanner