Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) {
- int master, slave;
- char name_slave[256];
- master = open("/dev/ptmx", O_RDWR | O_NONBLOCK);
- if (master == -1) {
- return -1;
- }
- if (grantpt(master)) {
- close(master);
- return -1;
- }
- if (unlockpt(master)) {
- close(master);
- return -1;
- }
- strcpy(name_slave, ptsname(master));
- slave = open(name_slave, O_RDWR | O_NOCTTY);
- if (slave == -1) {
- close(master);
- return -1;
- }
- *amaster = master;
- *aslave = slave;
- return 0;
- }
- pid_t forkpty(int *master, char *name, struct termios *tio, struct winsize *ws) {
- int slave;
- pid_t pid;
- if (openpty(master, &slave, NULL, NULL, NULL) == -1) {
- return -1;
- }
- pid = fork();
- if (pid < 0) {
- return -1;
- } else if (pid == 0) { //child
- close(*master);
- setsid();
- dup2(slave, 0);
- dup2(slave, 1);
- dup2(slave, 2);
- if (slave > 2) {
- close(slave);
- }
- return 0;
- }
- //parent
- close(slave);
- return pid;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement