Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по FIFO  (Прочитано 5606 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
SpLove
Гость
« : 08-05-2005 10:34 » 

Задание: Клиент принимает с клавиатуры команды и передает их серверу. Сервер выполняет эти команды, результаты возвращаются клиенту, который запи-сывает их в файл. Написал заготовку и не знаю что делать дальше  :?

Код:
// client
#define MY_FIFO "my_fifo"
#define SIZE 20

int main(int argc, char* argv[]) {
  int fdwr, fdrd, n;
  char com[SIZE],res[SIZE*SIZE];
  for (int i = 0; i < SIZE; i++) com[i] = ' ';
  if ((fdwr = open(MY_FIFO, O_WRONLY)) < 0){
     printf("Error opening of FIFO.\n");
     _exit(1);
  }
  scanf("%s", com);
  if (write(fdwr, com, SIZE)<0){
       printf("Error recording to FIFO.\n");
       _exit(1);
  }
  close(fdwr);

  if((fdrd = open(MY_FIFO, O_RDONLY)) < 0){
         printf("Error opening of FIFO.\n");
    _exit(1);
  }
  while((n = read(fdrd, res, SIZE*SIZE))>0)
       if (write(stdin, res, n) != n){
           printf("Error reading from FIFO\n");
      _exit(1);
   }
  printf("\n");
  close(fdrd);
  _exit(0);
}

Код:
// server
#define MY_FIFO "my_fifo"
#define SIZE 20

int main(int argc, char* argv[]) {
   int fdwr, fdrd, n, i;
   char com[SIZE],res[SIZE*SIZE];
   for (i = 0; i < SIZE; i++) com[i] = ' ';
   if (mknod(MY_FIFO, S_IFIFO|0666, 0) < 0){
      printf("Error creating of FIFO.\n");   
      _exit(1);
     }

   if ((fdrd=open(MY_FIFO, O_RDONLY)) < 0){
      printf("Error opening of FIFO.\n");
      _exit(1);
   }
   while((n = read(fdrd, com, SIZE)) > 0) {
      if (write(1, com, n) != n){
              printf("Error output.\n");
              _exit(1);
           }
           else {
         res = execlp(com, 0);
      }
     }
   close(fdrd);
 
   if ((fdwr = open(MY_FIFO, O_WRONLY)) < 0) {
               printf("Error opening of FIFO.\n");
      _exit(1);
     }
   if (write(fdwr, res, SIZE)<0){
      printf("Error recording to FIFO.\n");
      _exit(1);
   }
   close(fdwr);

     if (unlink(MY_FIFO) < 0){
      printf("Error deleting of FIFO.\n");
      _exit(1);
     }
     _exit(0);
}
« Последнее редактирование: 13-12-2007 18:16 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines