在一个进程中打开设备,在另一个进程中使用

时间:2018-01-20 15:44:52

标签: linux embedded-linux

我正在尝试设置两个处理小工具串行设备的过程" ttyGS0"。我正在使用" C"和/或" C ++"。出于各种原因,我想这样做:

  • 打开设备,以便从"州长"过程
  • 分娩给孩子"接收数据"处理数据接收的过程
  • 分叉(也来自"调控器"进程)到"传输数据"负责发送数据的流程。

"接受"和"传输"进程通过消息队列进行通信。

在这两种情况下,调控器进程都会传递从" open"操作到"发送"并且"收到"使用管道的过程。

现在,由于某种原因,接收过程正常。它从父级接收设备句柄,并且能够使用" read"使用该句柄接收从通过USB串行连接连接的PC发送的数据。

然而,当我尝试使用"写"从使用相同设备句柄的传输过程中,我收到错误9代码"无效句柄"。

有关为什么它可以用于读取过程而不是写入过程的任何想法?

" ttyGS0"被用作二进制串行端口。我将在此处包含代码,显示我如何从"州长"中打开设备。过程:

// --------------------------------------------------------------
// We will also open up the USB Serial Port (aka: "ttyGS0")
// Open the USB-Serial device for reading and writing
fUSBDev = open(USB_SERIAL_DEVICE_NAME, O_RDONLY | O_NOCTTY);
if (fUSBDev == -1)
{
    fprintf(stderr, "Device open failed\n");
    exit(EXIT_FAILURE);
}
rc = tcgetattr(fUSBDev, &tty);
if (rc < 0)
{
    fprintf(stderr, "Failed to read device attributes.\n";
    exit(EXIT_FAILURE);
}

spd = B115200;
cfsetospeed(&tty, (speed_t)spd);
cfsetispeed(&tty, (speed_t)spd);
cfmakeraw(&tty);
rc = tcsetattr(fUSBDev, TCSANOW, &tty);
if (rc < 0) 
{
    fprintf(stderr, "Failed to update device attributes.\n");
    exit(EXIT_FAILURE);
}
fprintf(stderr, "ttyGS0 opened.\n");

谢谢你, 标记

0 个答案:

没有答案