C клиентский сервер Redirect stdout и exec - PullRequest
1 голос
/ 22 января 2020

Когда я хочу запустить exe c с помощью простой команды, такой как ls или date, она запускается нормально и отправляет вывод клиенту. Но когда я использую ls -al, например, он печатает клиенту 4 строки, а другую, скажем, 3 в следующем l oop. Это проблема с буфером, но я не знаю, как ее исправить.

//child proccess
                    dup2(newsockfd,1);
                    dup2(newsockfd,2);
                    close(newsockfd);




                    fflush(stdout);
                    execvp(words[0],words); 
                    perror("execvp");
                    exit(EXIT_FAILURE);

Этот пример кода время от времени l oop, поэтому каждый раз, когда он принимает входные данные от клиента, выполняет синтаксический анализ и дает команду exe c. Я хорошо работает для небольшого выхода. Допустим, для ls или date или pwd. Но когда я делаю ls -al, который состоит из 7 строк, он печатает первые 4, а остальные - в следующем l oop. Я обнаружил, что эту проблему можно исправить, если я использую команду send. Используя флаг MSG_SENDALL, но здесь я делаю перенаправление и затем вызываю exe c. Есть ли ограничение между буфером сервера-клиента (сокет-буфером) ??

...