C 如何在posix_openpt()中定义名称

C 如何在posix_openpt()中定义名称,c,linux,serial-port,posix,C,Linux,Serial Port,Posix,我正在尝试编写程序,允许使用串行接口进行标准应用,通过以太网进行通信 我使用posix_openpt创建新的串行接口。它工作得很好,但每次调用posix_openpt时,串行接口都有不同的名称(如“/dev/pts/4”或“/dev/pts/5”) 我需要指定名称(编号),或使用类似udev规则的东西来创建符号链接以更正pty 有什么想法吗 谢谢我使用了符号链接: fd = posix_openpt(O_RDWR); if (fd < 0){ return -1; } if (

我正在尝试编写程序,允许使用串行接口进行标准应用,通过以太网进行通信

我使用posix_openpt创建新的串行接口。它工作得很好,但每次调用posix_openpt时,串行接口都有不同的名称(如
“/dev/pts/4”
“/dev/pts/5”

我需要指定名称(编号),或使用类似udev规则的东西来创建符号链接以更正pty

有什么想法吗

谢谢

我使用了符号链接:

fd = posix_openpt(O_RDWR);
if (fd < 0){
    return -1;
}

if ( (slavename = ptsname(fd)) == NULL ) {
    Close();
    return -1;
}

rc = grantpt(fd);
if (rc != 0){
    Close();
    return -1;
}

rc = unlockpt(fd);
if (rc != 0){
    Close();
    return -1;
}

fcntl(fd, F_SETFL, FNDELAY);
unlink(SER_PORT_NAME);
if(symlink(slavename,SER_PORT_NAME)){

}
fd=posix_openpt(O_RDWR);
如果(fd<0){
返回-1;
}
if((slavename=ptsname(fd))==NULL){
Close();
返回-1;
}
rc=赠款(fd);
如果(rc!=0){
Close();
返回-1;
}
rc=解锁(fd);
如果(rc!=0){
Close();
返回-1;
}
fcntl(fd、F_设置FL、FNDELAY);
取消链接(服务器端口名称);
if(符号链接(slavename,SER\u PORT\u NAME)){
}

……我想你需要再解释一下。为什么需要指定名称?您不能使用生成的端口吗?我使用串行端口进行应用程序通信(在配置文件中指定端口名)。该应用程序在嵌入式系统上自动启动。现在我需要通过特殊协议将串行端口重定向到以太网。我认为最好的方法是使用pty。但我必须确定,这个应用程序使用的是corect pty(corect串行端口)。您熟悉这个应用程序吗。我以前确实这样做过。不需要PTY,您采用的解决方案是错误的。要将串行端口重定向到tcp吗?所以你想把命令发送到你的TTY?到TCP套接字?请注意,您要求的是一个非常不同的东西。例如,我有通过串行端口控制GPIO的应用程序。我也有自己的以太网串行协议。该协议关注正确设置的串行配置(波特率、paryty、端口名……)在远程串行端口上。这意味着我需要打开GPIO应用程序并设置串行端口,然后我将读取串行端口配置,通过TCP发送并通过CP传递数据。我有几个像GPIO这样的应用程序,它们使用不同的串行端口配置。因此我需要创建pty/dev/pts/4来连接远程串行端口1,比/dev/pts/5hook-up-remote-serial-port 2更重要的是,也许我有XY问题,但我尽力描述X(我的问题)和Y(可能是“错误”的解决方案)。你能帮我拿X吗?因为我不知道怎么解决它。我想,我不能使用socat或其他东西。。。。谢谢你的建议!