Книга: Разработка приложений в среде Linux. Второе издание

17.2. Служебные функции

17.2. Служебные функции

Во всех примерах этого раздела используются две функции: copyData() и die(). Функция copyData() считывает данные из одного файлового дескриптора и записывает их в какой-то другой дескриптор (до тех пор, пока имеются данные для чтения). Функция die() вызывает perror() и завершает программу. Мы ввели обе указанные функции в файл sockutil.с для того, чтобы сделать обучающие программы немного проще. Для справки ниже показана реализация двух данных функций.

 1: /* sockutil.с */
 2:
 3: #include <stdio.h>
 4: #include <stdlib.h>
 5: #include <unistd.h>
 6:
 7: #include "sockutil.h"
 8:
 9: /* выдает сообщение об ошибке через функцию perror() и прекращает работу программы */
10: void die(char * message) {
11:  perror(message);
12:  exit(1);
13: }
14:
15: /* Копирует данные из дескриптора файла 'from' в дескриптор файла
16:  'to' до полного завершения копирования. Выходит из программы, если
17:  происходит ошибка. Предполагается, что для обоих файлов установлено
18:  блокирующее чтение и запись. */
19: void copyData(int from, int to) {
20:  char buf[1024];
21:  int amount;
22:
23;  while ((amount = read(from, buf, sizeof(buf))) > 0) {
24:   if (write(to, buf, amount) != amount) {
25:    die("write");
26:    return;
27:   }
28:  }
29:  if (amount < 0)
30:   die("read");
31: }

Оглавление книги


Генерация: 3.012. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз