在 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) 瞧!
我已经为 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) 瞧!