在 Android 上使用虚拟串行通信的两个进程(应用程序)中的 Read/Write 个字节

Read/Write bytes within two processes (apps) using virtual serial communication on Android

我已经为 Android 编写了一个 C/C++ 应用程序 (NDK),它可以为串行通信打开一个虚拟端口。它在同一进程内从端口写入和读取字节。到目前为止,这是有效的,我不必为了执行此操作而对我的设备进行 root。这是一个简单的程序,它执行以下操作:

int fd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
if (fd == -1) {
    LOGW("error opening file");

    return 1;
}

grantpt(fd);
unlockpt(fd);

char* pts_name = ptsname(fd);
LOGI("ptsname: %s\n", pts_name);

char* inputbyte = "This is a test\n";

char byte;

int numOfBytesWritten = write(fd, inputbyte, strlen(inputbyte));
LOGI("Number of bytes written: %d\n", numOfBytesWritten);

while (read(fd, &byte, 1) == 1) {
LOGI("Byte: %c\n", byte);
}

close(fd);

现在的问题是,如果我想在两个进程(两个应用程序)中做同样的事情,那是行不通的。一个进程打开 /dev/ptmx,另一个进程应该打开 /dev/pts 目录。每次从服务器尝试打开 /dev/pts 目录时,我都会收到错误 "error opening file" (-1)。我已经 root 了我的设备,但仍然无法正常工作。我为了等待slave打开/dev/ptmx目录后有休眠功能

我该怎么办?有任何想法吗?

我已经解决了这个问题,所以我会 post 解决方案,以防其他人感兴趣:

(1) 您的 phone 应该已 root。

(2) master 以“/dev/pts/N”的形式打开一个端口(本例中为变量 pts_name),其中 N 是一个数字。此端口由以下方式提供:

int fd = open("/dev/ptmx", O_RDWR | O_NOCTTY);  
if (fd == -1) {
     LOGW("error opening file");
     return 1;  
}  
char* pts_name = ptsname(fd);  
LOGI("ptsname: %s\n", pts_name);

(3) 授予端口权限(这可以通过编程方式或从 adb shell 完成)。从 shell 将是:

  • chmod 666 pts_name(例如 chmod 666 /dev/pts/4)。

(4) 执行打开这个端口的slave。例如 int fd = open("/dev/pts/4", O_RDWR);

(5) 瞧!