| 
			| 
					
						| McZim | 
								|  | «  : 09-06-2011 06:59 »  |  | 
 
 Всем привет. У меня такой вопрос. Например у нас есть программа, которая работает с буфером и файловой системой. Суть работы в следующем. Программа принимает некоторые данные в буфер и, например, каждые три секунды сбрасывает данные из буфера в файл, на файловой системе. Как программа работает с буфером не знаю, какие там есть способы в юникс системах, например memset, memcpy? Так вот, вопрос вот в чем, если например у нас буфер размером 5Мб, а за три секнды успело заполниться только 2Мб, что будет сброшено на диск? Весь буфер или только его заполненная часть? Если весь то что будет происходить с "пустой" частью буфера?
 Добавлено через 25 минут и 20 секунд:
 С точки зрения кода вроде понятно что операция происходит целиком с буфером. Увидел только указание размеров. А вот с точки зрения системы как? То есть возможно я зря думаю ниже кода, как сказано в коде так и будет!? Или все же...
 |  
						| 
								|  |  
								| « Последнее редактирование: 09-06-2011 09:57 от Джон » |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #1 : 09-06-2011 07:26 »  |  | 
 
 McZim, как буфер в программе реализован, так и будет.
 Белые люди делают очередь на запись с циклическим движением указателей в буфере.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #2 : 09-06-2011 07:28 »  |  | 
 
 а откуда система знает размер твоего! буфера, только ты сам.Сказал 3 метра, значит 3 метра и будет сброшено
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #3 : 09-06-2011 07:29 »  |  | 
 
 Dimka, а указатели куда указывают?Sla, в том то и дело, что буфер размером 5 метров, а заполнился на три. Вопрос, сколько будет сброшено на диск?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #4 : 09-06-2011 07:39 »  |  | 
 
 ну так 5 и будет сброшенно, вернее  столько сколько ты сказал.
 буфер = 5
 с инфой = 3
 буфер сброса = 1
 
 Сброс 1
 Сброс 1
 Сброс 1
 
 Сброс 1
 Сброс 1
 
 если хочешь меньше, то отслеживай конец буфера (указатель на последние данные)
 |  
						| 
								|  |  
								| « Последнее редактирование: 09-06-2011 07:41 от Sla » |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #5 : 09-06-2011 07:51 »  |  | 
 
 В этом и вопрос. Если он сбрасывает ВЕСЬ буфер, что будет происходить с "пустой" частью буфера? Она будет записана на диск? В каком виде, мусор?
 Если отслеживать конец данных в буфере, это нормальная практика? Есть стандартные механизмы описанные например в POSIX?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #6 : 09-06-2011 07:57 »  |  | 
 
 Ты же не очищаешь буфер пред использованием?
 Сброшено буде ВСЕ
 пример
 
 выделил буфер (пусть будет зачищен).
 заполнил до половины - сбросил.
 Будет сброшен весь ( в конце - заполнитель очистки)
 Указатель на начало
 
 заполнил до четверти - сбросил.
 Будет сброшен четверть + четверть до половины (если буфер не очищен) ( в конце - заполнитель очистки)
 Указатель на начало
 
 Но ты ведь пишешь в буфер по определенному указателю
 
 Посчитай разницу между началом буфера и указателем на начало записи в буфер, столько и сбрасывай.
 
 
 
 
 
 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #7 : 09-06-2011 08:07 »  |  | 
 
 Понял. То есть, если у нас запись в основном по 3, 3,5 метра в буфер, а размер буфера 5 метров. То уменьшив размер буфера, не факт что мы сможем повысить эффективность дисковой подсистемы, за счет НЕ записи "не нужных" двух (2) метров, потому как нужно быть уверенным, как именно работаем с буфером. Например если, как ты описал, мы будем отслеживать позицию указателя относительно от начала буфера, то нам не важен размер буфера, главное не выйти за его рамки.
 Так?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #8 :  09-06-2011 08:46 »   |  | 
 
 да, ты правильно понял.
 Буфера, нужен чтобы не потерять данные на момент сбора и для уменьшения операций ввода/вывода
 И если уж настало время, то нужно сбрасывать только актуальные данные, а об актуальности говорит указатель "записи" в буфер.
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #9 : 09-06-2011 09:43 »  |  | 
 
 Ок, всем спасибо! |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #10 : 09-06-2011 11:19 »  |  | 
 
 Что вообще за буфер? Ничига не понятно. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #11 : 09-06-2011 12:09 »  |  | 
 
 RXL, я тоже ничего не понял. Но Sla  говорит так уверенно, будто знает, что за буфер   |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #12 : 09-06-2011 12:19 »  |  | 
 
 Та ладно вам прибедняться... |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #13 : 09-06-2011 13:18 »  |  | 
 
 Слав, если буфера ОС, то непонятно, какие, если приложения - то вообще ничего не понятно. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #14 : 09-06-2011 13:29 »  |  | 
 
 Так как оказалось, что я понял Макса, а Макс понял меня, то попытаюсь объяснить. есть программа, которая работает с буфером Это значит что она сбрасывает что-то в буфер (свой) и файловой системой. И в какой-то момент сбрасывает этот буфер на диск.  если например у нас буфер размером 5Мб Этот буфер в программе за три секнды успело заполниться только 2Мб И каждые три секунды, например буфер сбрасывается на диск что будет сброшено на диск?Весь буфер или только его заполненная часть?  Ответ: Весь буфер. Если весь то что будет происходить с "пустой" частью буфера? Ответ: Сбрасывай только "заполненную часть" |  
						| 
								|  |  
								| « Последнее редактирование: 09-06-2011 13:34 от Sla » |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #15 : 09-06-2011 18:53 »  |  | 
 
 Ответ: Весь буфер. Почему? Если буфер программы, то сбрасывается он так, как написано в программе. Я лично не знаю, как написано. Ответ: Сбрасывай только "заполненную часть" Но вывод из всего сказанного верный   |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #16 : 09-06-2011 19:31 »  |  | 
 
 Фиксированный буфер обычно либо сплошной, либо сегментированный. Соотв., либо известно начало и конец, либо есть список заполненных сегментов. Вроде бы очевидно. Потому и не понятно было. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #17 : 10-06-2011 03:43 »  |  | 
 
 А чем стандартная буферизация в ostream не устроила? зачем свой велосипед?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #18 : 10-06-2011 14:19 »  |  | 
 
 мне просто нужно было абстрактно понять, я подзабыл. Поэтому ничего конкретного! |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	|  |