[英]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目录时,我都会收到错误“打开文件错误”(-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中完成)。 从外壳将是:
(4)执行从站,以完全打开该端口。 例如int fd = open(“ / dev / pts / 4”,O_RDWR);
(5)瞧!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.