ТехноСаратов → Блог

Почему в Windows два символа в конце строки?БлогОперационные системы

Совершенно случайно нашел эту статейку (на инглише) и решил, что она интересна ТехноСаратовцам. К стати, на картинке Билл Гейтс в 1968 году (видимо который мелкий 🙂 ).

В темные века до нашей … эры (до компьютеров) существовало устройство под названием телетайп модели 33. Эта удивительная машина содержала регистр сдвига состояший из двигателя и ротора, а также клавиатурную ПЗУ состоящую исключительно из рычагов и пружин.

Также у нее была клавиатура, принтер и лента бумаги для печати/чтения. Она могла передавать сообщения через телефонную линию, используя модем с молниеносной скоростью — 10 символов в секунду (2admin, GPRS не так и плох).

У телетайпа были проблемы. Его печатающая головка перемещалась с правой стороны на левую за 2/10 секунды. А 2/10 секунды это два символа (через модем). И если второй символ приходил бы когда печатающая головка была по середине, то он был бы утерян.

По тому решили устранить эту проблему путем использования в конце строки двух символов: (carriage return) — перевести каретку в лево и (line feed) — прокрутить бумагу вверх на одну строку. Таким образом пока (line feed) прокручивал бумагу печатающая головка в темпе возвращалась к левому краю.

Когда начали выпускаться компьютеры некоторые разработчики поняли, что два символа конца строки слишком расходуют память (в те времена память была дифицитом). Некоторые из них выбрали (line feed) за конец строки, другие (carriage return). Некоторые пользующиеся вымирающими железками оставили два символа в конце строки.

UNIX использует (line feed) в конце строки. Символ ‘n’ является кодом 0xA (LF или (line feed)).

MS-DOS/Windows использует два символа: (line feed)(carriage return). Дизайнеры компиляторов столкнулись с проблемой; что делать со старыми программами на Си, которые думали, что символом новой строки был только один символ (line feed)? Решение они нашли в том, чтобы добавить код для библиотеки ввода вывода, который удалял символ (carriage return) из входных файлов и заменял (line feed) на (line feed) (carriage return) на выходе.

(Исходник: http://www.oualline.com/eol.html)