Чтение онлайн

на главную - закладки

Жанры

UNIX: взаимодействие процессов

Стивенс Уильям Ричард

Шрифт:

19 buf = Valloc(xfersize);

20 Touch(buf, xfersize);

21 Pipe(contpipe);

22 mq_unlink(Px_ipc_name(NAME)); /* error OK */

23 attr.mq_maxmsg = 4;

24 attr.mq_msgsize = xfersize;

25 mq = Mq_open(Px_ipc_name(NAME), O_RDWR | O_CREAT, FILE_MODE, &attr);

26 if ((childpid = Fork) == 0) {

27 writer(contpipe[0], mq); /* child */

28 exit(0);

29 }

30 /* 4parent */

31 Start_time;

32 for (i = 0; i < nloop; i++)

33 reader(contpipe[1], mq, totalnbytes);

34 printf("bandwidth: %.3f MB/sec\n",

35 totalnbytes / Stop_time * nloop);

36 kill(childpid, SIGTERM);

37 Mq_close(mq);

38 Mq_unlink(Px_ipc_name(NAME));

39 exit(0);

40 }

Листинг А.6. Функции reader и writer

//bench/bw_pxmsg.c

41 void

42 writer(int contfd, mqd_t mqsend)

43 {

44 int ntowrite;

45 for(;;) {

46 Read(contfd, &ntowrite, sizeof(ntowrite));

47 while (ntowrite > 0) {

48 Mq_send(mqsend, buf, xfersize, 0);

49 ntowrite –= xfersize;

50 }

51 }

52 }

53 void

54 reader(int contfd, mqd_t mqrecv, int nbytes)

55 {

56 ssize_t n;

57 Write(contfd, &nbytes, sizeof(nbytes));

58 while ((nbytes > 0) &&

59 ((n = Mq_receive(mqrecv, buf, xfersize, NULL)) > 0)) {

60 nbytes –= n;

61 }

62 }

Программа измерения полосы пропускания очереди System V

В листинге А.7 приведен текст функции main, измеряющей полосу пропускания очередей сообщений System V, а в листинге А.8 текст функций reader и writer.

Листинг А.7. Функция main для измерения полосы пропускания очереди сообщений System V

//bench/bw_svmsg.c

1 #include "unpipc.h"

2 void reader(int, int, int);

3 void writer(int, int);

4 struct msgbuf *buf;

5 int totalnbytes, xfersize;

6 int

7 main(int argc, char **argv)

8 {

9 int i, nloop, contpipe[2], msqid;

10 pid_t childpid;

11 if (argc != 4)

12 err_quit("usage: bw_svmsg <#loops> <#mbytes> <#bytes/write>");

13 nloop = atoi(argv[1]);

14 totalnbytes = atoi(argv[2]) * 1024 * 1024;

15 xfersize = atoi(argv[3]);

16 buf = Valloc(xfersize);

17 Touch(buf, xfersize);

18 buf->mtype = 1;

19 Pipe(contpipe);

20 msqid = Msgget(IPC_PRIVATE, IPC_CREAT | SVMSG_MODE);

21 if ((childpid = Fork) == 0) {

22 writer(contpipe[0], msqid); /* дочерний процесс */

23 exit(0);

24 }

25 Start_time;

26 for (i = 0; i < nloop; i++)

27 reader(contpipe[1], msqid, totalnbytes);

28 printf("bandwidth: %.3f MB/sec\n",

29 totalnbytes / Stop_time * nloop);

30 kill(childpid, SIGTERM);

31 Msgctl(msqid, IPC_RMID, NULL);

32 exit(0);

33 }

Листинг А.8. Функции reader и writer

//bench/bw_svmsg.c

34 void

35 writer(int contfd, int msqid)

36 {

37 int ntowrite;

38 for (;;) {

39 Read(contfd, &ntowrite, sizeof(ntowrite));

40 while (ntowrite > 0) {

41 Msgsnd(msqid, buf, xfersize – sizeof(long), 0);

42 ntowrite –= xfersize;

43 }

44 }

45 }

46 void

47 reader(int contfd, int msqid, int nbytes)

48 {

49 ssize_t n;

50 Write(contfd, &nbytes, sizeof(nbytes));

51 while ((nbytes > 0) &&

52 ((n = Msgrcv(msqid, buf, xfersize – sizeof(long), 0, 0)) > 0)) {

53 nbytes –= n + sizeof(long);

54 }

55 }

Поделиться:
Популярные книги

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Седьмая встреча

Вассму Хербьёрг
Проза:
современная проза
4.00
рейтинг книги
Седьмая встреча

Поводырь

Щепетнов Евгений Владимирович
3. Ботаник
Фантастика:
фэнтези
6.17
рейтинг книги
Поводырь

Я до сих пор царь. Книга XXXII

Дрейк Сириус
32. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор царь. Книга XXXII

Когда он был порочным

Куин Джулия
6. Бриджертоны
Любовные романы:
исторические любовные романы
8.85
рейтинг книги
Когда он был порочным

Кодекс Охотника. Книга II

Винокуров Юрий
2. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
боевая фантастика
юмористическое фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга II

Изгой Проклятого Клана. Том 5

Пламенев Владимир
5. Изгой
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 5

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Кодекс Императора III

Сапфир Олег
3. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора III

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

За Горизонтом

Вайс Александр
8. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
За Горизонтом

Падение Софии (русский роман)

Хаецкая Елена Владимировна
Фантастика:
фэнтези
5.00
рейтинг книги
Падение Софии (русский роман)

Товарищ "Чума" 2

lanpirot
2. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 2