linux下串口编程之困惑
最近准备做一个GNome下的应用程序,是与一个外部设备通过串口通信。对于linux下的串口通信,小弟有一些困惑,希望大家能够指点。
1,我做的这个应用程序是希望独占一个串口,请问我用fopen的函数打开串口后,别的程序可以操作它吗?有没有独占打开串口的方法,既不让别的程序打开串口。
2,我对串口的理解是,由于串口有rx与tx,所以读写是相对独立的,所以读写并不需要遵循相应的时序,即我在读串口的同时,其实也可以写串口,写串口的同时,也可以读串口,对吗?
3,由于外部设备可以独立地向PC通过串口发送数据,所以,PC端需要在串口有数据到达就接受,但数据合适到达并不确定,我想用异步的模式来操作串口,并不想不断地去读串口数据。我打算用select方法来做。
我想代码应该如下:
while(1)
{
...
ret = select(serialPort, &rdfds, NULL, NULL, NULL);
...
}
但我想的问题是,如果调用了上述接收函数,它就会一直在while循环中,这时程序的其它代码都不能执行,比如PC向串口发送数据到设备,比如GNome窗口的响应,对吧?
我想到的方法有二:
一,将ret = select(serialPort, &rdfds, NULL, NULL, NULL);这段代码加到GNome中的事件轮询机制中去,但我还不晓得方法。
二,fork一个子进程,专门负责接收串口数据。这时,父进程依然可以向串口写数据,并不需要与子进程同步,对吗?
我希望大家能够给些建议。
4,有没有别的方法,既可以实现串口的异步接收数据,又不用新的进程或线程的方法,并且不影响程序其它部分的功能?