Редактор QED , написанный в 1965 году для системы разделения времени Беркли , использовал $
для обращения к последней строке в файле , точно так же, как ed
, ex
, vi
и vim
делает сегодня. См. стр. 2 -1 в руководстве . Однако исходный редактор QED не позволял использовать регулярные выражения.
Кен Томпсон позднее («в конце 1960-х» )написал версию QED для Multics, которая стала первым редактором, реализующим регулярные выражения. Этот редактор сильно повлиял на разработку Кеном ed
в 1969 году для Unix (, позже «доработанную» Деннисом Ричи примерно в 1971 году ). Билл Джой, разочаровавшись в ed
, реализовал ex
и vi
, и они были частью первого выпуска BSD в 1977 году для PDP -11.
Выражения ^
и $
вместе с большей частью того, что стало синтаксисом регулярных выражений POSIX, с семантикой, которую он имеет сегодня, были реализованы в версии QED Кена. См. , стр. 4 в руководстве .
Неясно, откуда взялся выбор этих конкретных символов, но $
уже имело значение «последний» из-за того, как оно использовалось для обращения к последней строке.
На некоторых терминалах невозможно было сгенерировать символ ^
. Поэтому редактор QED Кена разрешил использовать \'
вместо ^
(, см. руководство Bell Labs).
Ошибка сегментации возникает при доступе к областям памяти, доступ к которым запрещен. Часто это происходит из-за разыменования нулевого указателя или доступа к памяти за пределами выделенной памяти.
Если полный набор данных работает, а подмножество — нет:
Это может быть вызвано и тем, и другим. Чаще всего это программная ошибка, как описал Крис, но некоторые аппаратные проблемы (, особенно плохая память и плохое питание ), также могут привести к segfaults. Неверное значение считывается из памяти, что приводит к выполнению поврежденной инструкции, чтению поврежденного указателя, использованию поврежденной таблицы страниц и т. д. Все это приводит к segfault.
Разница, тем не менее, заключается в том, что аппаратные -сбои сегментации в значительной степени случайны , вызваны одним -из -нескольких -миллионов событий переключения битов (, если система более нестабильна, она даже не загружается ). С другой стороны, ошибки Segfault, вызванные программными ошибками, могут быть полностью повторяемыми.