我已经为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目录时,都会出现错误“打开文件错误”(-1)。我已经扎根了设备,但仍然无法正常工作。打开/ dev / ptmx目录后,我有一个睡眠功能,以等待从属服务器。

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

最佳答案

我已经解决了这个问题,因此如果其他人有兴趣,我将发布解决方案:

(1)您的手机应植根。

(2)主站以“/ 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 将是:
  • su
  • chmod 666 pts_name(例如chmod 666 / dev / pts / 4)。

  • (4)执行从站,以完全打开该端口。例如int fd = open(“/ dev / pts / 4”,O_RDWR);

    (5)天哪!

    关于android - 使用Android上的虚拟串行通信在两个进程(应用程序)内读取/写入字节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39371524/

    10-12 02:43