LINUX.ORG.RU

История изменений

Исправление 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;
}