Subject: write() to /dev/ttyb results in EIO
To: None <>
From: Christopher Forkin <>
List: port-sparc
Date: 02/05/2003 23:32:20
Hi guys,
I just must be missing something here, but can't seem to figure out
how to use termios.h correctly on NetBSD sparc. I have connected a modem
to the 2nd serial port on my sparcserver5 and can communicate with it
with tip without any issues at all. I have been sofar unsuccessfull
however in writing to it using the open() and write() system calls
(read() seems to work without a problem). Whenever I try to use write
I get errno=5 (EIO).
I have reduced the code as far as I could to the sample below and am
just surprised that this doesn't work on NetBSD (has no problems on
FreeBSD/386)? Terminal I/O is something new for me and I would appreciate
any help even if it means showing me where I have made a complete fool
of myself.
-------------------<cut here>-------------------
#include <stdio.h>
#include <termios.h>
#include <fcntl.h>
#include <sys/errno.h>
#include <err.h>
#include <unistd.h>

int main(int argc, char **argv) {
  int tty;
  int ret;
  struct termios term;
  char buf[255];
  ssize_t bytes;

  if((tty=open(argv[1], O_RDWR|O_NOCTTY|O_NONBLOCK|O_APPEND))<0) {
    err(1, "open(%s) failed", argv[1]);

  if(tcgetattr(tty, &term)<0) {
    err(2, "getattr() failed");
  term.c_lflag &= ~ECHO; /* no echo */
  term.c_cflag |= CS8; /* 8bit character size */
  term.c_cflag &= ~CSTOP; /* 1 stop bit */
  term.c_cflag &= ~PARENB; /* no parity */
  term.c_cflag &= ~CLOCAL; /* no modem control */
  if(cfsetspeed(&term, 9600)<0) {
    err(3, "cfsetspeed() failed");
  if(tcsetattr(tty, TCSANOW, &term)<0) {
    err(4, "setattr() failed");
  if((bytes=write(tty, "AT\r\n", 4))<0) {
    err(5, "write() failed");
  if((bytes=read(tty, &buf, 255))<0) {
    err(6, "read() failed");
  if((ret=close(tty))<0) {
    err(7, "close() failed");
-------------------<cut here>-------------------
// Email:                                  //
// Postal:  P.O.Box 106, Berowra Heights, NSW 2082, Australia //