我已经为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 将是:
(4)执行从站,以完全打开该端口。例如int fd = open(“/ dev / pts / 4”,O_RDWR);
(5)天哪!
关于android - 使用Android上的虚拟串行通信在两个进程(应用程序)内读取/写入字节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39371524/