r/C_Programming • u/Senior-Question693 • 5d ago
forkpty error
i'm trying to make a terminal emulator but i can't figure out how to open a pty.
when i try to open a pty bouth forkpty from pty.h and my own implementation:
int init_pty() {
int ptymaster_fd = posix_openpt(O_RDWR);
if (ptymaster_fd == -1) {
perror("failed to open pty master");
close(ptymaster_fd);
return 1;
}
if (grantpt(ptymaster_fd) == -1) {
perror("failed to grantpt");
close(ptymaster_fd);
return 1;
}
if (unlockpt(ptymaster_fd) == -1) {
perror("failed to unlockpt");
close(ptymaster_fd);
return 1;
}
char* ptyslave_name = ptsname(ptymaster_fd);
if (ptyslave_name == NULL) {
perror("failed to get pty slave name");
close(ptymaster_fd);
return 1;
}
pid_t pid = fork();
if (pid != 0) {
perror("fork");
close(ptymaster_fd);
return 1;
}
setsid();
int ptyslave_fd = open(ptyslave_name, O_RDWR);
if (ptyslave_fd == -1) {
perror("failed to open pty slave");
return 1;
}
ioctl(ptyslave_fd, TIOCSCTTY, 0);
dup2(ptyslave_fd, STDIN_FILENO);
dup2(ptyslave_fd, STDOUT_FILENO);
dup2(ptyslave_fd, STDERR_FILENO);
return ptymaster_fd;
}
fail when forking with the error directory not empty, ai says that it fails because /dev/pts is not empty but it's obviously trippin balls as usual =), so why does it fail then (?_?)
6
Upvotes
1
u/HugoNikanor 5d ago
Your code looks fine. Been a while since I wrote a terminal emulator, but pasting (the relevant parts) of my own working one below.
(termios setup for child is since it's technically a multiplexer and not an emulator, but those are the same thing at the end of the day)