отложенная функция добавления / удаления класса не работает

Я бы поставил это как комментарий, но у меня нет достаточного количества репутации, поскольку я новичок. cd - это встроенная команда оболочки, поэтому вы хотите использовать system (). Но cd не повлияет на ваш процесс (для этого вам нужно использовать chdir ()), поэтому то, что вы действительно хотите сделать, это запустить оболочку в качестве подпроцесса через fork / exec, подключить к ней протокол stdin и stdout, затем pipe его команды на время сеанса пользователя или соединения.

Следующий код дает общую идею. Основной и ошибочный - используйте select () not usleep () для одного.

int argc2;
printf( "Server started - %d\n", getpid() );
char buf[1024] = {0};
int pid;
int pipe_fd_1[2];
int pipe_fd_2[2];
pipe( pipe_fd_1 );
pipe( pipe_fd_2 );

switch ( pid = fork() ) 
{
case -1:
    exit(1);
case 0: /* child */
    close(pipe_fd_1[1]);
    close(pipe_fd_2[0]);
    dup2( pipe_fd_1[0], STDIN_FILENO );
    dup2( pipe_fd_2[1], STDOUT_FILENO );
    execlp("/bin/bash", "bash", NULL);
default: /* parent */
    close(pipe_fd_1[0]);
    close(pipe_fd_2[1]);
    fcntl(pipe_fd_2[0], F_SETFL, fcntl(pipe_fd_2[0], F_GETFL, NULL ) | O_NONBLOCK );
    while(true)
    {
      int r = 0;
      printf( "Enter cmd:\n" );
      r = read( STDIN_FILENO, &buf, 1024 );
      if( r > 1 )
      {
        buf[r] = '\0';
        write(pipe_fd_1[1], &buf, r);
      }
      usleep(100000);
      while( ( r = read( pipe_fd_2[0], &buf, 1024 ) ) > 0 )
      {
        buf[r-1] = '\0';
        printf("%s", buf );
      }
      printf("\n");
    }
}
13
задан Bizarro Zeldman 10 February 2011 в 08:24
поделиться