Моя концепция буферизации (Выношу её на суд общественности)
Модератор: Модераторы разделов
-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Моя концепция буферизации
...Пусть посмеются, зато хоть скажут, правильно я её мыслю или нет... Итак:
Друзья! Дабы изучать язык С- надо её знать, такой уж он, этот язык. Нигде (естественно) я пр неё ничего не нашёл, пришлось домысливать самому. А не могло быть по другому- начало изучение С, это "printf", "scanf" и иже с ними. Ну, куда без понимания того, что там в буфере происходит? В общем, не судите строго. Манера изложения такова, чтобы понял новичок (с книгами, конечно- я их не повторяю: что такое getchar ()) и так далее). Ну, а если я чушь написал, остаётся одно- просить начальство, чтобы они эту тему куда-нибудь удалили!
Модель буфера в моём понимании.
Набор того, что сейчас уместно назвать байтом, есть буфер. То есть куча байтов, выстроенных в ряд, примернотак:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Что из себя представляет бит, я сказать затрудняюсь. Но он либо ноль, либо единица. Перед началом каждой прораммы буфер пуст- это означает, что в нём одни нули, как на картинке выше. Заполнение буфера должно происходить вручную в то время, когда, когда программа "подошла" к выполнению функции считывания символа (символов) и остановилась. В качестве примера рассмотрим одну из таких функций- функцию getchar (). Если программа "подошла" к выполнению этой функции остановилась, это значит, что буфер пуст и его надо сделать не пустым и запустить команду для работы функции getchar()- для этого вводим в буфер символы- просто нажимаем клавиши. Нажатие, допустим, клавиши "t" будет означать, что буфер стал таким:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110100
крайний правый символ не что иное как двоичное представление числа 116. По другому: это внутреннее представление в компьютере символа "t". По вводу следущей клавиши, допустим, "r", буфер примет такой вид:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110100 01110010
Теперь крайний правый байт есть двоичное представление числа 114. По-другому: внутреннее представление символа "r". А двоичное представление числа 116 оказалось во втором байте справа. Нажимая клавиши и так изменяя буфер, мы его "заполняем". Термин "заполнение" означает только вышесказанное, но не означает, что "заполняя", мы обязательно изменяем таким образом весь буфер.
Каждое новое заполнение отслеживается программой. Если будет нажата клавиша <Enter> (внутреннее представление этой клавиши есть представление в двоичной форме числа 10), буфер примет вид: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110100 01110010 00001010
программа тоже это отследит. Появление такой комбинации (смотри крайний правый байт) означает три вещи:
1) следующие символы будут печататься в новой строке;
2) компьютер получает информацию "буфер не пуст";
3) запущена команда для работы функции getchar ();
Считывание функцией getchar () символа из буфера означает, помимо всего прочего, "обнуление" соответствующего байта в буфере (вот этой очень важной вещи я нигде не встречал и даже намёка на неё не встречал, хотя это очено важно. Поправьте меня, если я не прав!). Функция getchar () символ, который она будет считывать, находит так: она последовательно проверяет все символы, находящиеся левее правого крайнего байта.
1) Как только будет найден символ, состоящий из одних нолей, функция getchar () обнуляет символ, стоящий правее этого символа, состоящего из одних нолей. В нашем примере буфер после этого примет такой вид:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110010 00001010
На этом функция getchar () заканчивает работу. Или:
2)Если функцией getchar () не будет найдено ни одного символа, состоящего из одних нолей (что может означать только одно- заполнением видоизменены все байты буфера), тогда обнуляется крайний левый байт. На этом функция getchar () заканчивает работу.
А всякие тонкости, типа: если будет не getchar (), а scanf; если будет несколько getchar (), если будет нажата одна клавиша <Enter>-всё это можно и самому, эксперементируя, домыслить. Главное, чтобы основное было правильно.
И не судите строго- я всего лишь учусь.
Правильно я понимаю буфер?
Друзья! Дабы изучать язык С- надо её знать, такой уж он, этот язык. Нигде (естественно) я пр неё ничего не нашёл, пришлось домысливать самому. А не могло быть по другому- начало изучение С, это "printf", "scanf" и иже с ними. Ну, куда без понимания того, что там в буфере происходит? В общем, не судите строго. Манера изложения такова, чтобы понял новичок (с книгами, конечно- я их не повторяю: что такое getchar ()) и так далее). Ну, а если я чушь написал, остаётся одно- просить начальство, чтобы они эту тему куда-нибудь удалили!
Модель буфера в моём понимании.
Набор того, что сейчас уместно назвать байтом, есть буфер. То есть куча байтов, выстроенных в ряд, примернотак:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Что из себя представляет бит, я сказать затрудняюсь. Но он либо ноль, либо единица. Перед началом каждой прораммы буфер пуст- это означает, что в нём одни нули, как на картинке выше. Заполнение буфера должно происходить вручную в то время, когда, когда программа "подошла" к выполнению функции считывания символа (символов) и остановилась. В качестве примера рассмотрим одну из таких функций- функцию getchar (). Если программа "подошла" к выполнению этой функции остановилась, это значит, что буфер пуст и его надо сделать не пустым и запустить команду для работы функции getchar()- для этого вводим в буфер символы- просто нажимаем клавиши. Нажатие, допустим, клавиши "t" будет означать, что буфер стал таким:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110100
крайний правый символ не что иное как двоичное представление числа 116. По другому: это внутреннее представление в компьютере символа "t". По вводу следущей клавиши, допустим, "r", буфер примет такой вид:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110100 01110010
Теперь крайний правый байт есть двоичное представление числа 114. По-другому: внутреннее представление символа "r". А двоичное представление числа 116 оказалось во втором байте справа. Нажимая клавиши и так изменяя буфер, мы его "заполняем". Термин "заполнение" означает только вышесказанное, но не означает, что "заполняя", мы обязательно изменяем таким образом весь буфер.
Каждое новое заполнение отслеживается программой. Если будет нажата клавиша <Enter> (внутреннее представление этой клавиши есть представление в двоичной форме числа 10), буфер примет вид: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110100 01110010 00001010
программа тоже это отследит. Появление такой комбинации (смотри крайний правый байт) означает три вещи:
1) следующие символы будут печататься в новой строке;
2) компьютер получает информацию "буфер не пуст";
3) запущена команда для работы функции getchar ();
Считывание функцией getchar () символа из буфера означает, помимо всего прочего, "обнуление" соответствующего байта в буфере (вот этой очень важной вещи я нигде не встречал и даже намёка на неё не встречал, хотя это очено важно. Поправьте меня, если я не прав!). Функция getchar () символ, который она будет считывать, находит так: она последовательно проверяет все символы, находящиеся левее правого крайнего байта.
1) Как только будет найден символ, состоящий из одних нолей, функция getchar () обнуляет символ, стоящий правее этого символа, состоящего из одних нолей. В нашем примере буфер после этого примет такой вид:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01110010 00001010
На этом функция getchar () заканчивает работу. Или:
2)Если функцией getchar () не будет найдено ни одного символа, состоящего из одних нолей (что может означать только одно- заполнением видоизменены все байты буфера), тогда обнуляется крайний левый байт. На этом функция getchar () заканчивает работу.
А всякие тонкости, типа: если будет не getchar (), а scanf; если будет несколько getchar (), если будет нажата одна клавиша <Enter>-всё это можно и самому, эксперементируя, домыслить. Главное, чтобы основное было правильно.
И не судите строго- я всего лишь учусь.
Правильно я понимаю буфер?
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 2910
Re: Моя концепция буферизации
Буфер, как место для скопления инфы - можно сравнить со стаканом. Наприемр, как stdout. Его неполняют, а когда полон до краев - выпивают все залпом 

-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Какой командой его опорожняют? Как я узнаю, что он полон до краёв?
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
Смотря какой буфер. Узнаете, считав столько байт, сколько помещается в буфер.
Буфер -- это временное хранилище байт, которые поступают не с той скоростью, с какой они обрабатываются.
Как пересыльная тюрьма. Этапируемые зэки поступают с разной частотой. Сегодня ни одного, завтра пять. Чтобы поезд в лагерь не гонять каждый раз, как зэк прибыл, их накапливают и считают. Как есть ровно столько зэков, чтобы один вагон занять -- на этап.

-
- Сообщения: 2910
Re: Моя концепция буферизации
Uncle_Theodore, наши примеры жгут 

-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Uncle_Theodore писал(а): ↑08.11.2007 21:02
Смотря какой буфер. Узнаете, считав столько байт, сколько помещается в буфер.
Буфер -- это временное хранилище байт, которые поступают не с той скоростью, с какой они обрабатываются.
Как пересыльная тюрьма. Этапируемые зэки поступают с разной частотой. Сегодня ни одного, завтра пять. Чтобы поезд в лагерь не гонять каждый раз, как зэк прибыл, их накапливают и считают. Как есть ровно столько зэков, чтобы один вагон занять -- на этап.
Я не понимаю.
На этап, это значит, на обработку данных. Так? Так. Обработка данных начинается по команде <Enter>. Так? Так. На <Enter> мы жмём не тогда, когда буфер полный, а когда считаем, что все нужные символы введены. Это может быть один или два символа, но никак не полный буфер. Значит, мы опорожняем буфер не по мере его наполнения, а по мере надобности.
Так?
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
promov писал(а): ↑08.11.2007 21:23Я не понимаю.
На этап, это значит, на обработку данных. Так? Так. Обработка данных начинается по команде <Enter>. Так? Так. На <Enter> мы жмём не тогда, когда буфер полный, а когда считаем, что все нужные символы введены. Это может быть один или два символа, но никак не полный буфер. Значит, мы опорожняем буфер не по мере его наполнения, а по мере надобности.
Так?
Вы смешиваете немножко разные вещи. Буфер как именно буфер -- компенсатор различной скорости движения (как между вагонами) и "буфер" как просто временное хранилище данных, которые потом передадут в другое место. Но я все же отвечу: если Вы приняли твердое решение опустошить буфер, какая Вам разница, полон он или нет?
-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Хорошо, хорошо. Вы по первому посту сможете что-то сказать? Если я не прав там- дело одно. А если прав- как его опорожнить, я уж соображу. Да вот хотя бы этой мной написанной функцией:
Код: Выделить всё
//Она называется polnoeobnuleniebufera, разработана с учётом моего понимания буфера
int polnoeobnuleniebufera () {
{
}
while (getchar ()!= '\n');
return 0;
}
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
Из первого поста я вообще ничего не понял. Для чтения с клавиатуры в общем случае вообще никакой буфер не нужен, Вы же не печатаете быстрее, чем программа Ваши буковки обрабатывает. Соответственно, и нету его там. 
И вообще, для буфера совершенно не важно знать, пустой он или нет.
Важно знать, полный он или нет.
PS. Функция красивая, да.
А что она делает?

И вообще, для буфера совершенно не важно знать, пустой он или нет.
Важно знать, полный он или нет.
PS. Функция красивая, да.
А что она делает?
-
- Сообщения: 60
Re: Моя концепция буферизации
Бред какой-то. Автор, погугли на тему стеков, очередей, FIFO, LIFO и тд
Arch / Linux-ck 64bit / xmonad / vim,opera,deadbeef,zsh /
-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Действие или действия, которые эта функция совершает, прописаны в условии. А тело цикла- просто фигурные скобки, в теле она ничего не делает. Зато в условии вызывается функция getchar (), которая принимает значение очередного символа (очередь начинается с крайнего левого ненулевого байта, продолжается вправо, состоит только из ненулевых байтов.) она считывает этот очередной символ из буфера и тот байт, в котором этот символ хранился, в буфере обнуляется.( Или его обнуляют. Но это уже неважно). Проверяется, не считала ли getchar () '\n'.
1) Если считала именно '\n', значит, буфер пуст, ибо по запуску getchar () в нём может находиться только один символ '\n' (в смысле не два и не три таких символа, другие-то конечно, могут быть- цифры, буквы всякие)и он- крайний правый (это всё мои соображения, но в них укладывается всё- и работа scanf%s, например). Но я отвлёкся. Всё, цикл закончился и getchar () больше не вызовется. Конец функции. Или:
2) Если считано не '\n', значит, снова возвращаемся к телу цикла, чисто номинально проходим фигурные скобки (в теле цикла ничего не происходит, ещё раз повторю) и снова к условию пришли. А в условии сказано: вызывается getchar (). Так, она вызвалась, проверила: не пустой ли буфер? Нет, не пустой. И getchar () снова начала считывать очередной символ.
Конец обязательно будет, поскольку, согласно моим предположениям крайний правый символ- это '\n'. И он один. И последний штрих: даже если буфер пуст, функцияч будет вполне корректно работать- по запуску функции он уже пуст не будет, в нём будет находиться единственный символ '\n'. Его-то getchar () благополучно сотрёт и всё.
Здесь Вам всё понятно? (к слову "ряд" не придираться)
1) Если считала именно '\n', значит, буфер пуст, ибо по запуску getchar () в нём может находиться только один символ '\n' (в смысле не два и не три таких символа, другие-то конечно, могут быть- цифры, буквы всякие)и он- крайний правый (это всё мои соображения, но в них укладывается всё- и работа scanf%s, например). Но я отвлёкся. Всё, цикл закончился и getchar () больше не вызовется. Конец функции. Или:
2) Если считано не '\n', значит, снова возвращаемся к телу цикла, чисто номинально проходим фигурные скобки (в теле цикла ничего не происходит, ещё раз повторю) и снова к условию пришли. А в условии сказано: вызывается getchar (). Так, она вызвалась, проверила: не пустой ли буфер? Нет, не пустой. И getchar () снова начала считывать очередной символ.
Конец обязательно будет, поскольку, согласно моим предположениям крайний правый символ- это '\n'. И он один. И последний штрих: даже если буфер пуст, функцияч будет вполне корректно работать- по запуску функции он уже пуст не будет, в нём будет находиться единственный символ '\n'. Его-то getchar () благополучно сотрёт и всё.
promov писал(а): ↑08.11.2007 20:10Набор того, что сейчас уместно назвать байтом, есть буфер. То есть куча байтов, выстроенных в ряд, примернотак:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Что из себя представляет бит, я сказать затрудняюсь. Но он либо ноль, либо единица. Перед началом каждой прораммы буфер пуст
Здесь Вам всё понятно? (к слову "ряд" не придираться)
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
1. Вы плохо понимаете сарказм. 
2. Никакого буфера для считывания символов с клавиатуры Вам не нужно.

2. Никакого буфера для считывания символов с клавиатуры Вам не нужно.
-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Я ничего не понимаю. Я увидел сомнение в работоспособности и моём авторстве функции, пыхчу, её описывая, задаю вопрос... И что я вижу после этого? Ни ответа, ни привета, прочли, не прочли, потеряли интерес, прочтёте позже... И я же тролль после этого.
Но, может быть, Вы этот вопрос осветите: программа запрашивает ввод строки. Я ввожу... э... буковки. И они не (попадают в буфер, а потом на экран)?
Но, может быть, Вы этот вопрос осветите: программа запрашивает ввод строки. Я ввожу... э... буковки. И они не (попадают в буфер, а потом на экран)?
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: Моя концепция буферизации
promov писал(а): ↑08.11.2007 21:43Код: Выделить всё
//Она называется polnoeobnuleniebufera, разработана с учётом моего понимания буфера int polnoeobnuleniebufera () { { } while (getchar ()!= '\n'); return 0; }
А я ещё иногда стыжусь показывать свой быдлокод... Зря наверное.
В дисгармонии со вселенной.
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
promov писал(а): ↑08.11.2007 22:45Uncle_Theodore писал(а): ↑08.11.2007 21:52Из первого поста я вообще ничего не понял. Для чтения с клавиатуры в общем случае вообще никакой буфер не нужен, Вы же не печатаете быстрее, чем программа Ваши буковки обрабатывает. Соответственно, и нету его там.
Я запускаю программу. Программа запрашивает ввод строки (scanf %s, допустим). И я пишу ...э ...буковки. Они не (попадают в буфер, а потом на экран?)
Вашей программе абсолютно по барабану, как Ваши буковки попали на экран. Скажу больше, программе абсолютно по барабану, и как формируется строка, которую она потом считывает. Этим занимается оболочка. Оболочка отправляет строку в standard IN программы, и только тут Ваша программа может решать, что теперь со всем этим счастьем делать. Standard IN -- это файловый дескриптор номер нуль. Вот отсюда и танцуйте.
-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Да при чём тут по барабану не по барабану? Неужели трудно ответить попадают или не попадают? Если не попадают , значит, пересматриваю то, что я придумал. Если попадают, значит, потом пересматриваю то, что я придумал. Пыхтишь тут, стараешься вопросы сформулировать так, чтобы на них однозначно можно было ответить...
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
Когда Вы нажимаете кнопочки на клавиатуре, они генерят электрические импульсы, которые поступают на обработку драйверу клавиатуры, который в ядре. Если у драйвера клавиатуры буффера? Фиг его знает, может и есть. Надо нам знать, есть ли они у него, если мы пишем программу решения квадратного уроавнения? Мне почему-то кажется, что нет. Драйвер клавиатуры интерпретирует импульмы как последовательность байт и рисует их в устройство, которое файл. Из этого файла они подхватываются Иксовым сервером и передаются программе, которая заведует активным окном. Есть ли у Икса буфферы? До фига и даже больше. Надо нам про них знать, чтобы написать программу решения квадратного уравнения? См выше. Активное оконо создано программой xterm, которая также вызвала программу bash. И теперь скармливает эту последовательность буковок этой программе. Буферит? Не буферит? Понятия не имею. А надо?
Внутрях программы bash бегает наша программа решения квадратного уравнения. Программа bash берет переданную ей последовательность пуковок и формирует из них строки. До Энтера. А строки херачит на стандартный ввод нашей программы. Ура! Стандартный ввод -- это файловый дескриптор. Вот отсюда уже можно думать за нашу программу.
Пыхтишь тут, стараешься вопросы сформулировать так, чтобы на них однозначно можно было ответить...
Вы уже перестали пить коньяк по утрам?

Начинайте от задачи, а не от фантазий. Сэкономите себе много времени. Зачем Вам понадобились буфера? Судя по Вашей "функции" они Вам еще долго не понадобятся, не сочтите за наезд.

-
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Извените что отвлекаю, не совсем по теме но все равно 
А разве нету хардверного буфера в самой клаве как ПУ? По моему есть.

А разве нету хардверного буфера в самой клаве как ПУ? По моему есть.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Ой- ой... Цитата
"
Когда вы выполняете приведённую выше программу на некоторых системах, бтекст, который вводится с клавиатуры, немедленно отображается на экране. ВЫполняя эту программу, вы получите нечть, подобное следующему результату:
jjllggrrffddeettyy,,
Подобное поведение не является типичным. В большинстве систем ничего не произойдёт, если не нажать клавишу <Еnter>... Немедленный эхо-вывод символов входных данных на экране представляет собой пример небуферизироанного, или прямого ввода (Стоп, за него ни слова!- прим. моё, promov), означающего, что символ, который вы ввели с клавиатуры, немеленно становится доступным для ожидающей его программы. С другой стороны, задержанный эхо-вывод характеризует буферизированный ввод, когда введённые вами символы накапливаются и хранятся во временной области, называемой буфером. Нажатие клавиши <Enter> приводит к тому, что введённый блок символов становится доступным для программы" Конец цитаты
Стивен Прата, "Язык программирования С, лекции и упражнения", Москва- Санкт- Петербург- Киев, 2006 г.
Теперь другие цитаты:
И наконец...
Спокойной ночи!
"
Код: Выделить всё
int main () {
char ch;
while ((getchar ())!= '#');
return 0;
}
Когда вы выполняете приведённую выше программу на некоторых системах, бтекст, который вводится с клавиатуры, немедленно отображается на экране. ВЫполняя эту программу, вы получите нечть, подобное следующему результату:
jjllggrrffddeettyy,,
Подобное поведение не является типичным. В большинстве систем ничего не произойдёт, если не нажать клавишу <Еnter>... Немедленный эхо-вывод символов входных данных на экране представляет собой пример небуферизироанного, или прямого ввода (Стоп, за него ни слова!- прим. моё, promov), означающего, что символ, который вы ввели с клавиатуры, немеленно становится доступным для ожидающей его программы. С другой стороны, задержанный эхо-вывод характеризует буферизированный ввод, когда введённые вами символы накапливаются и хранятся во временной области, называемой буфером. Нажатие клавиши <Enter> приводит к тому, что введённый блок символов становится доступным для программы" Конец цитаты
Стивен Прата, "Язык программирования С, лекции и упражнения", Москва- Санкт- Петербург- Киев, 2006 г.
Теперь другие цитаты:
Uncle_Theodore писал(а): ↑08.11.2007 21:52Для чтения с клавиатуры в общем случае вообще никакой буфер не нужен, Вы же не печатаете быстрее, чем программа Ваши буковки обрабатывает. Соответственно, и нету его там.
Uncle_Theodore писал(а): ↑08.11.2007 22:412. Никакого буфера для считывания символов с клавиатуры Вам не нужно.
И наконец...
Спокойной ночи!
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
Это зависит от оболочки, в которой Вы запускаете программу. В bash'е ввод "буферизованный". Всегда. И никак Вы на это повлиять не можете.
Меня начинает посещать мысль профессора Преображенского по поводу Вашего Стивена Пратта. В печку бы ее...
promov, не обижайтесь, право.
А напишите-ка мне программу решения квадратного уравнения. Просто так, для прикола? А? Pretty please with sugar on top?
По поводу последнего вопроса. Программа не запрашивает ввод строки. Она выводит на экран сообщение "Введите мне строку". После чего пытается читать со своего стандартного инпута. Если на стандартном инпуте ничего нету, то прочитать она ничего не может и сидит ждет. Как появится что-то там -- стандартные функции чтения это дело запрочитывают.
Меня начинает посещать мысль профессора Преображенского по поводу Вашего Стивена Пратта. В печку бы ее...

promov, не обижайтесь, право.
А напишите-ка мне программу решения квадратного уравнения. Просто так, для прикола? А? Pretty please with sugar on top?
По поводу последнего вопроса. Программа не запрашивает ввод строки. Она выводит на экран сообщение "Введите мне строку". После чего пытается читать со своего стандартного инпута. Если на стандартном инпуте ничего нету, то прочитать она ничего не может и сидит ждет. Как появится что-то там -- стандартные функции чтения это дело запрочитывают.
-
- Сообщения: 60
Re: Моя концепция буферизации
promov, кончайте уже заниматься ерундой. Вам тут умные люди всё по полочкам раскладывают, так вы еще и упорствуете.
ps Забейте на программирование пока не поздно, это - не ваше. Вы, наверное, гумманитарий.
ps Забейте на программирование пока не поздно, это - не ваше. Вы, наверное, гумманитарий.
Arch / Linux-ck 64bit / xmonad / vim,opera,deadbeef,zsh /
-
- Сообщения: 321
- ОС: Arch Linux + WinXP
Re: Моя концепция буферизации
promov, займись чем-нить более полезным, или Шилдта почитай что-ли? только не надо придумывать фантазии на тему, что там происходит, это в данном случае лишнее, т.к. тебе тогда придётся не с С начинать, а с основ построения ОС и компиляторов...
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
Ну ладно, ладно, нефик на человека наезжать (мне можно

-
- Сообщения: 230
- ОС: MSDOS 3.3
Re: Моя концепция буферизации
Uncle_Theodore писал(а): ↑08.11.2007 23:19Когда Вы нажимаете кнопочки на клавиатуре, они генерят электрические импульсы, которые поступают на обработку драйверу клавиатуры, который в ядре. Если у драйвера клавиатуры буффера? Фиг его знает, может и есть.
Конечно есть. В этот буфер заносятся даже не сами символы а скен-коды клавиш. Вернее пары скен-кодов - "нажатие клавиши", "отпускание клавиши". Потом анализируется на наличие скен-кодов функциональных клавиш, преобразование скен-кодов в в коды символов в соответствии с таблицей кодов и включеного регистра. Потом вся эта потеха переписывается в буфер пользовательской программы. В общем механика довольно непростая.
Но происходит это всё на уровне ниже городской канализации, и я согласен с дядей Тео что программисту об этом знать ни к чему, потому как если он будет задумываться о самой низкоуровневой работе такой простой вещи как клавиатура, то он совсем окаменеет если начнет разбираться на этом уровне работы с диском.
Программист тогда совсем утонет в "городской канализации"

Путь линуксоида очень напоминает путь воина, главными особенностями которого являются ответственность и самодисциплина. Но и награды этого пути достойны: это свобода и мастерство.
-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Хорошо... Цитата:
"Во многих приложениях, связанных с обработкой текста, тебуется считывание целой строки текста. Эта строка считывается в определённое место памяти, называемое "буфером"" Конец цитаты.
Cтефан Кочан, "Программирование на языке С", Москва- Санкт- Петербург- Киев, 2007 г.
Значит. Я не спрашивал за ввод, какой он у меня. Вы ответили на вопрос, который не важен- ну или не важен на данный момент, тем самым вынудив меня парировать. К сожалению, именно парировать- я вынужден не узнавать суть, задавая вопросы, а показывать Вам несоответствие между тем, что говорите Вы и написано в книгах. И опять же: для чего? Чтобы услышать: "В печку!"? Мне это надоело.
...А за квадратное уравнение я Вам так скажу. Могли бы что-нибудь и поизощрённей придумать. Эту программу я и списать откуда-нибудь смогу. Если начну сам писать, испытаю некоторое затруднение в извлечении квадратного корня из дискриминанта (да-да, того самого, равного b*b-4*a*c)- придётся это делать вручную. Это нетрудно, просто это некоторое время. Существует ли стандартная функция в С? Кто её знает, может, да, может, нет. Меня это не очень интересовало, есть- хорошо, нет- извлеку квадратный корень руками, если приспичит.
Да и вообще, я Вам уже говорил. Я на PASCAL написал программу решения японских кроссвордов, а Вы со своим квадратным уравннием... А алгоритм Евклида Вам не напечатать? А ответ на вопрос: пересекаются ли две прямые, заданные точками? Все варианты? Я и такое писал...
"Во многих приложениях, связанных с обработкой текста, тебуется считывание целой строки текста. Эта строка считывается в определённое место памяти, называемое "буфером"" Конец цитаты.
Cтефан Кочан, "Программирование на языке С", Москва- Санкт- Петербург- Киев, 2007 г.
Значит. Я не спрашивал за ввод, какой он у меня. Вы ответили на вопрос, который не важен- ну или не важен на данный момент, тем самым вынудив меня парировать. К сожалению, именно парировать- я вынужден не узнавать суть, задавая вопросы, а показывать Вам несоответствие между тем, что говорите Вы и написано в книгах. И опять же: для чего? Чтобы услышать: "В печку!"? Мне это надоело.
...А за квадратное уравнение я Вам так скажу. Могли бы что-нибудь и поизощрённей придумать. Эту программу я и списать откуда-нибудь смогу. Если начну сам писать, испытаю некоторое затруднение в извлечении квадратного корня из дискриминанта (да-да, того самого, равного b*b-4*a*c)- придётся это делать вручную. Это нетрудно, просто это некоторое время. Существует ли стандартная функция в С? Кто её знает, может, да, может, нет. Меня это не очень интересовало, есть- хорошо, нет- извлеку квадратный корень руками, если приспичит.
Да и вообще, я Вам уже говорил. Я на PASCAL написал программу решения японских кроссвордов, а Вы со своим квадратным уравннием... А алгоритм Евклида Вам не напечатать? А ответ на вопрос: пересекаются ли две прямые, заданные точками? Все варианты? Я и такое писал...
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: Моя концепция буферизации
Существует ли стандартная функция в С?
Типо да.
man sqrt:
ИМЯ
sqrt - вычисление квадратного корня
СИНТАКСИС
#include <math.h>
double sqrt(double x);
ОПИСАНИЕ
Функция sqrt() возвращает неотрицательный квадратный корень аргумента x. Функция завершается с ошибкой и присваивает errno значение EDOM в том случае,
если x - отрицательное число.
P.S. manpages-ru, ёптыть - приятная штука.
В дисгармонии со вселенной.
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Моя концепция буферизации
promov писал(а): ↑09.11.2007 00:33Хорошо... Цитата:
"Во многих приложениях, связанных с обработкой текста, тебуется считывание целой строки текста. Эта строка считывается в определённое место памяти, называемое "буфером"" Конец цитаты.
Cтефан Кочан, "Программирование на языке С", Москва- Санкт- Петербург- Киев, 2007 г.
И опять Вы путаете божий дар с яичницей...
В данном случае речь идет не о клавиатурном вводе, а чтении из файла. И там действительно, можно попытаться заглотить файл куском, а можно читать строку за строкой. Это другая ситуация, понимаете? А Вы себя уже запутали до последней степени...
Значит. Я не спрашивал за ввод, какой он у меня. Вы ответили на вопрос, который не важен- ну или не важен на данный момент, тем самым вынудив меня парировать. К сожалению, именно парировать- я вынужден не узнавать суть, задавая вопросы, а показывать Вам несоответствие между тем, что говорите Вы и написано в книгах. И опять же: для чего? Чтобы услышать: "В печку!"? Мне это надоело.
Услышьте, пожалуйста, не слова "в печку", а слова о необходимости методичности в изучении программирования. Не надо пытаться начать с первооснов программирования. начните с простых для Вас вещей, потом переходите к трудным. Начинайте от задачи, а не от инструмента. А то получается, что Вы хотите сначала научиться водить бульдозер, а потом узнать, что этим бульдозером можно делать. Формулируйте простые и естесственные задачи и ищите инструменты для их решения. Не начинайте с покупки бульдозера. Удостоверьтесь, сначала, что Вам нужно рыть канаву.
...А за квадратное уравнение я Вам так скажу. Могли бы что-нибудь и поизощрённей придумать. Эту программу я и списать откуда-нибудь смогу. Если начну сам писать, испытаю некоторое затруднение в извлечении квадратного корня из дискриминанта (да-да, того самого, равного b*b-4*a*c)- придётся это делать вручную. Это нетрудно, просто это некоторое время. Существует ли стандартная функция в С? Кто её знает, может, да, может, нет. Меня это не очень интересовало, есть- хорошо, нет- извлеку квадратный корень руками, если приспичит.
Не надо ничего изощренного. И не надо ниоткуда ничего списывать. Сделайте сами и для себя, я-то умею решать квадратные уравнения.

Я серьезно. Напишите программу решения квадратного уравнения. I dare you.

-
- Сообщения: 60
Re: Моя концепция буферизации
Да вы просто монстр какой-то, такие сложные вещи делаете. rofl
Arch / Linux-ck 64bit / xmonad / vim,opera,deadbeef,zsh /
-
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Моя концепция буферизации
Флужу:
И опять Вы неправы. Вот полностью цитата
"Во многих приложениях, связанных с обработкой текста, тебуется считывание целой строки текста. Эта строка считывается в определённое место памяти, называемое "буфером"" для дальнейшей обработки. Если в этом случае применить функцию scanf с символом форматирования '%s' , то идея не сработает, т. к. ввод строки будет прекращён при встрече первого же пробела" Конец цитаты.
Cтефан Кочан, "Программирование на языке С", Москва- Санкт- Петербург- Киев, 2007 г.
Это может быть клавиатурный ввод. Может, ввод с клавиатуры, может ещё какой. И именно про него я и спрашивал с самого начала. Вы это поняли.
Теперь: можно и про квадратные уравнения что-то сказать и ещё что-нибудь, но знаете, надоели Вы мне хуже горькой редьки. Вам что- сказали и забыли. А я переживай потом. Я если тролль, то я знаю: я тролль. Cтановясь таковым, Вы, кажется, в отличие от меня не отдаёте себе в этом отсчёта. Поэтому просьба не обращать больше на меня внимания. И мой Вам совет- возьмите в библиотеке книгу профессора педагогических наук Лобка Александра Михайловича "Антропология мифа". Возьмите и прочтите. Вашу квалификацию учителя она подымет. Должна, во всяком случае- есть к тому предпосылки.
Uncle_Theodore писал(а): ↑09.11.2007 00:43И опять Вы путаете божий дар с яичницей...
В данном случае речь идет не о клавиатурном вводе, а чтении из файла. И там действительно, можно попытаться заглотить файл куском, а можно читать строку за строкой. Это другая ситуация, понимаете? А Вы себя уже запутали до последней степени...
И опять Вы неправы. Вот полностью цитата
"Во многих приложениях, связанных с обработкой текста, тебуется считывание целой строки текста. Эта строка считывается в определённое место памяти, называемое "буфером"" для дальнейшей обработки. Если в этом случае применить функцию scanf с символом форматирования '%s' , то идея не сработает, т. к. ввод строки будет прекращён при встрече первого же пробела" Конец цитаты.
Cтефан Кочан, "Программирование на языке С", Москва- Санкт- Петербург- Киев, 2007 г.
Это может быть клавиатурный ввод. Может, ввод с клавиатуры, может ещё какой. И именно про него я и спрашивал с самого начала. Вы это поняли.
Теперь: можно и про квадратные уравнения что-то сказать и ещё что-нибудь, но знаете, надоели Вы мне хуже горькой редьки. Вам что- сказали и забыли. А я переживай потом. Я если тролль, то я знаю: я тролль. Cтановясь таковым, Вы, кажется, в отличие от меня не отдаёте себе в этом отсчёта. Поэтому просьба не обращать больше на меня внимания. И мой Вам совет- возьмите в библиотеке книгу профессора педагогических наук Лобка Александра Михайловича "Антропология мифа". Возьмите и прочтите. Вашу квалификацию учителя она подымет. Должна, во всяком случае- есть к тому предпосылки.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?