LINUX.ORG.RU

Максимальный размер канала

 ,


0

2

Вот программа, которая путем записи в канал до тех пор, пока он полностью не заполнится, должна находить максимальный размер канала. При выполнении программы я получаю числа, последнее из которых 8191. Но это ведь не размер в байтах. Как получить размер?

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main() {
	int fd[2], result, i = 0;
	size_t size;
	if (pipe(fd) != 0) {
		printf("Can\'t create pipe\n");
		return;
	}
	while (1) {
		size = write(fd[1], "Message", 8);
		printf("%d\n", i++);
	}
	return 0;
}

первый Return куда?

sqq
()

ну так суммируйте size, а не инкрементируйте i.

vodz ★★★★★
()

i++ возвращает значение i ДО инкремента. Поэтому 8191 - номер последнего записанного 8-байтного сообщения. Следовательно, всего записано 8192 сообщений, и размер пайпа в вашем случае - 8192*8 байт = 64 килобайт

vvvvvvvv
()
Ответ на: комментарий от vvvvvvvv

размер пайпа в вашем случае - 8192*8 байт = 64 килобайт

Это неверно. Записывая по 8 байт, вы не заполните полностью весь буфер, в нём останутся дыры. Надо записывать как минимум по PIPE_BUF байт.

Sorcerer ★★★★★
()
Ответ на: комментарий от Sorcerer

Записывая по 8 байт, вы не заполните полностью весь буфер, в нём останутся дыры.

Какие еще дыры? Это пайп, а не scatter-gather array

annulen ★★★★★
()
Ответ на: комментарий от Sorcerer

вы не заполните полностью весь буфер, в нём останутся дыры

Это тут при чем?

telikan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.