Решение Perl 5.14 (который короче и IMO легче читать — особенно, если Вы форматируете его по нескольким строкам в файле, вместо как острота),
perl -pE 's{(\[ .*? \])}{$1 =~ y/ //dr}gex'
Это работает, потому что в 5,14, механизм регулярного выражения повторно используем. Здесь это, расширено и прокомментировало:
s{
(\[ .*? \]) # search for [ ... ] block, capture (as $1)
}{
$1 =~ y/ //dr # delete spaces. you could add in other whitespace here, too
# d = delete; r = return result instead of modifying $1
}gex; # g = global (all [ ... ] blocks), e = replacement is perl code, x = allow extended regex
У меня нет той книги для проверки, но я принимающий ее использование нормального значения системных вызовов, затем системный вызов является вызовом в ядро для выполнения некоторой операции, которую аппаратные средства считают привилегированным или не знают. Это используется для осуществления полномочий, и т.д. в системе. Таким образом, необходимо сделать системный вызов (среди многих других вещей):
Математика не является одной из тех вещей. Как правило, это не требует никакого вмешательства от ядра.
"Системный вызов" является вызовом к функции ядра. Это необходимо для функциональности, управляемой ядром, как доступ к устройствам. Для "нормальной" операции как добавляющие числа не необходима никакая помощь от ядра. Поэтому называя библиотеку, которая только вычисляет материал, никакой вызов к пространству ядра не необходим, также.
Можно использовать strace
показать все системные вызовы данной программы.
getcpu()
то, что предназначено.
– mattdm
02.01.2014, 18:49
Выполнение процесса выполняет инструкции ЦП по определению. Существует несколько инструкций ЦП, которые могут только быть выполнены в привилегированном режиме, главным образом инструкции, связанные с доступом к аппаратным средствам вне ЦП включая RAM или к изменению некоторых конфигураций. Ядро выполняется в привилегированном режиме, обычные процессы выполняются в непривилегированном режиме. Детали того, что “означает привилегированный режим”, зависят от архитектуры ЦП.
Чисто вычислительные инструкции, такие как целочисленные операции и операции с плавающей точкой не требуют никакого привилегированного доступа, таким образом, они могут быть выполнены обычными процессами.
Когда процесс хочет выполнить операцию, которая требует полномочий, он должен вызвать некоторый код ядра, чтобы сделать это. Существует специальная инструкция ЦП, которая одновременно переключает ЦП на привилегированный режим и ответвления к предопределенному адресу в памяти. В подобной Unix операционной системе (и в большинстве Ose в целом), это действие называют системным вызовом.
Unix обеспечивает изоляцию между процессами, таким образом, это настраивает процессор (а именно, MMU) таким способом, которым каждый процесс может только получить доступ к своей собственной памяти а не памяти других процессов или ядра. (Почти) любое действие, которое могло влиять на другие процессы или это включает доступ к аппаратным средствам вне основного ЦП, проходит ядро и следовательно требует системного вызова. Это включает доступ к файлам и устройствам, сетям, межпроцессному взаимодействию, полномочию и управлению памятью, и т.д.
Вы видите документацию для системных вызовов в Вашей системе в разделе 2 из руководства. Вы видите, какие системные вызовы процесс делает путем запуска его через truss
на Солярисе и FreeBSD, strace
на Linux или эквивалентах под другими вариантами Unix.