使用unistd.h和C写入mac OSX 10.9.3上的串口

时间:2014-06-23 17:30:20

标签: c macos serial-port

我尝试使用标准C中的unistd.h将一些字节写入mac OSX 10.9.3上的串口。我知道有一个类似的主题,但是它已经有4年了,还有一个不同的问题,所以请请原谅我开始一个新线程。

我的问题是write();函数,它总是以-1返回值。打开我的端口的代码如下:

  
curByte = 0;
numBytes = 0;
bool blocking = false;
//Settings structure old and new
struct termios newtio;

fd = open(port, O_RDWR | O_NOCTTY | (blocking ? 0 : O_NDELAY));
if (fd < 0)
{
    return PORT_ERROR;
}
bzero(&newtio, sizeof(newtio));

if (cfsetispeed(&newtio, BDR_ESP3) != 0)
    return PORT_ERROR;
if (cfsetospeed(&newtio, BDR_ESP3) != 0)
    return PORT_ERROR;

newtio.c_cflag &= ~PARENB;
newtio.c_cflag &= ~CSTOPB;
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS8;
newtio.c_cflag &= ~CRTSCTS;

//Hardware control of port
newtio.c_cc[VTIME] = blocking ? 1 : 0; // Read-timout 100ms when blocking
newtio.c_cc[VMIN] = 0;

tcflush(fd, TCIFLUSH);
//Acquire new port settings
if (tcsetattr(fd, TCSANOW, &newtio) != 0)
    puts(strerror(errno));
return OK;

我可以毫无问题地打开端口,但是一旦我尝试使用以下方法将字节写入端口:

 
{
int res;

if (fd == -1)
    return PORT_ERROR;
    res = write(fd, &u8TxByte, 1);
if (res == -1){
    printf("Error writing to port - %s(%d).\n", strerror(errno), errno);
}
if (res == 1)
    printf("Writing to port succeeded!");
    return OK;

return ERROR;
 }

我不断收到错误输出:

  

写入端口时出错 - 资源暂时不可用(35)。

它让我疯了!因为相同的代码实际上适用于Linux,所以OSX的区别在哪里?资源暂时不可用是什么意思?

我希望我能很好地描述我的问题,有人可以帮助我! 谢谢!

1 个答案:

答案 0 :(得分:4)

使用相应的/dev/cu.xxx设备,您的程序可能会正常工作。

/dev/tty.xxx适用于OS / X上的传入连接,仅在断言DCD时才有效。