Advertisement
Guest User

Untitled

a guest
Dec 6th, 2011
724
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.14 KB | None | 0 0
  1. /* A simple program that sets up a pty interface to login to. */
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <netdb.h>
  6.  
  7.  
  8. int ForkPTYI(int *FD, char *Name)   /* This is a quick function I wrote to encaspulate forkpty(). */
  9. {                       /* The return value is a pid of either the master or slave. */
  10.         int PID;
  11.  
  12.         PID = forkpty(FD, Name, 0, 0);
  13.  
  14.         return PID;
  15. }
  16.  
  17. int main(void)
  18. {
  19.         int pty, pid, ret;
  20.         char Name[400];
  21.  
  22.        
  23.         if((pid = ForkPTYI(&pty, Name)) < 0)
  24.         {       /* Cannot open PTY. */
  25.                 perror("FORK");
  26.                 return -1;
  27.         }
  28.  
  29.         if(!pid)
  30.         {       /* Slave. */
  31.                 execv("/bin/bash", NULL);
  32.         }
  33.  
  34.         else
  35.         {       /* Master. */
  36.                 char Output[500];
  37.                 char Input[500];
  38.                 fd_set FDs, FDCopy;
  39.  
  40.                 /* Setup select(). */
  41.                 FD_ZERO(&FDs);
  42.                 FD_SET(0, &FDs);        /* Add STDIN to the list. */
  43.                 FD_SET(pty, &FDs);      /* Add child's STDOUT to the list. */
  44.  
  45.  
  46.                 for(;;)
  47.                 {       /* This loop continually looks for input on the descriptors. */
  48.                         FDCopy = FDs;
  49.  
  50.                         select(pty+1, &FDCopy, NULL, NULL, NULL);
  51.  
  52.                         /* Check for output from the child. */
  53.                         if(FD_ISSET(pty, &FDCopy))
  54.                         {
  55.                                 memset(Output, 0, sizeof(Output));
  56.                                 read(pty, Output, sizeof(Output));
  57.  
  58.                                 printf("%s", Output);
  59.                         }
  60.  
  61.                         /* Check if the user has entered commands. */
  62.                         if(FD_ISSET(0, &FDCopy))
  63.                         {
  64.                                 memset(Input, 0, sizeof(Input));
  65.                                 fgets(Input, sizeof(Input), stdin);     /* Read from keyboard. */
  66.                                 write(pty, Input, strlen(Input));
  67.                         }
  68.  
  69.                 }
  70.  
  71.         }
  72.  
  73.  
  74.         return 0;
  75. }
  76.  
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement