问题描述
我目前正在尝试将数据手动输入 GPSD。为此,我有一个脚本,当前将数据(它只是一个 JSON 字符串)输出到 stdout,然后使用 socat 制作一种假串行设备。但是,我不想使用另一个过程,因此基本上我想将创建、链接和持续写入从该 c 代码集成到 pty。这是我目前拥有的,它只是一些将字符串写入 pty 的测试代码。但是当我在设备运行时进入设备时,什么也没有显示。'
#include <sys/stat.h>
#include <fcntl.h>
#define _XOPEN_SOURCE 600
#include <termios.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#define MAX_SNAME 1000
int posix_openpt(int flags){
return open("/dev/ptmx",flags);
}
int ptyMasterOpen(char *slaveName,size_t snLen){
int masterFd,savedErrno;
char *p;
masterFd = posix_openpt(O_RDWR | O_NOCTTY); /* Open pty master */
if (masterFd == -1)
return -1;
if (grantpt(masterFd) == -1) { /* Grant access to slave pty */
savedErrno = errno;
close(masterFd); /* Might change 'errno' */
errno = savedErrno;
return -1;
}
if (unlockpt(masterFd) == -1) { /* Unlock slave pty */
savedErrno = errno;
close(masterFd); /* Might change 'errno' */
errno = savedErrno;
return -1;
}
p = ptsname(masterFd); /* Get slave pty name */
if (p == NULL) {
savedErrno = errno;
close(masterFd); /* Might change 'errno' */
errno = savedErrno;
return -1;
}
if (strlen(p) < snLen) {
strncpy(slaveName,p,snLen);
} else { /* Return an error if buffer too small */
close(masterFd);
errno = EOVERFLOW;
return -1;
}
return masterFd;
}
int main(int argc,char **argv) {
int flags = O_RDWR | O_NOCTTY | O_NDELAY;
char slavename[MAX_SNAME];
ptyMasterOpen(slavename,900);
printf("%s",slavename);
int fd = open(slavename,flags);
char msg[] = "hello there......General Kenobi\n";
for(;;){
write(fd,msg,sizeof(msg));
}
close(fd);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)