繁体   English   中英

使用Android上的虚拟串行通信在两个进程(应用程序)内读取/写入字节

[英]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中完成)。 从外壳将是:

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

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

(5)瞧!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM