История изменений
Исправление vova7890, (текущая версия) :
оказалось всё тривиально просто, днём думать нельзя, определённо... Оставлю тут кусок кода.
int use_pty(const char *link_to)
{
char ptyname[512];
int ttyfd = -1;
int ptyfd = open("/dev/ptmx", O_RDWR | O_NOCTTY, 0620);
if( ptyfd < 0 ) {
fprintf(stderr, "Can't open /dev/ptmx\n");
return -1;
}
if( grantpt(ptyfd) ) {
fprintf(stderr, "Failed to grantpt: %s\n", strerror(errno));
close(ptyfd);
return -1;
}
if( unlockpt(ptyfd) ) {
fprintf(stderr, "Failed to unlockpt: %s\n", strerror(errno));
close(ptyfd);
return -1;
}
if( openpty(&ptyfd, &ttyfd, ptyname, NULL, NULL) ) {
fprintf(stderr, "Failed to open pty device: %s\n", strerror(errno));
close(ptyfd);
return -1;
}
printf("ptyname: %s\n", ptyname);
unlink(link_to);
if( symlink(ptyname, link_to) ) {
fprintf(stderr, "symlink '%s' -> '%s' failed: %s\n", ptyname, link_to, strerror(errno));
} else {
printf("pty linked to '%s'\n", link_to);
chmod(link_to, 0777);
}
return ptyfd;
}
Исходная версия vova7890, :
оказалось всё тривиально просто, днём думать нельзя, определённо... Оставлю тут кусок кода.
int use_pty(const char *link_to)
{
char ptyname[512];
int ttyfd = -1;
int ptyfd = open("/dev/ptmx", O_RDWR | O_NOCTTY, 0620);
if( ptyfd < 0 ) {
fprintf(stderr, "Can't open /dev/ptmx\n");
return -1;
}
if( grantpt(ptyfd) ) {
fprintf(stderr, "Failed to grantpt: %s\n", strerror(errno));
close(ptyfd);
return -1;
}
if( unlockpt(ptyfd) ) {
fprintf(stderr, "Failed to unlockpt: %s\n", strerror(errno));
close(ptyfd);
return -1;
}
if( openpty(&ptyfd, &ttyfd, ptyname, NULL, NULL) ) {
fprintf(stderr, "Failed to open pty device: %s\n", strerror(errno));
close(ptyfd);
return -1;
}
printf("ptyname: %s\n", ptyname);
unlink(link_to);
if( symlink(ptyname, link_to) ) {
fprintf(stderr, "symlink '%s' -> '%s' failed: %s\n", ptyname, link_to, strerror(errno));
} else {
printf("pty linked to '%s'\n", link_to);
chmod(link_to, 0777);
}
return ptyfd;
}