Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
fputs(buf, stdout); return 0;}При запуске в двух различных локалях она выдает такой результат:
$ <b>LC_ALL=en_US ch13-strfmon</b> /* В Соединенных Штатах */You owe me $1,234.57 (USD 1,234.57)$ <b>LC_ALL=it_IT ch13-strfmon</b> /* В Италии */You owe me EUR 1.235 (EUR 1.235)Как вы можете видеть,
strfmon()strftime()%n %i %% %Форматируемые значения должны иметь тип
double%n%ien_US%n$%iГибкость — и соответственно определенная сложность — сопровождают многие функции API, разработанные для POSIX, и
strfmon()printf()%in%[<i>флаги</i>][<i>ширина поля</i>][#<i>точность_слева</i>][.<i>точность_справа</i>]i%[<i>флаги</i>][<i>ширина поля</i>][#<i>точность_слева</i>][.<i>точность_справа</i>]n%% /* Не допускаются поля флагов, ширины и т.д. */Флаги перечислены в табл. 13.2.
Таблица 13.2. Флаги для
strfmon()| Флаг | Значение |
|---|---|
=с | Использовать символ с в качестве символа числового заполнения слева. Символом по умолчанию является пробел. Обычной альтернативой является 0 |
^ | Запретить использование символа группировки (например, запятой в Соединенных Штатах) |
( | Отрицательные значения заключать в скобки. Несовместим с флагом + |
+ | Обрабатывать положительные/отрицательные значения обычным образом. Использовать положительные и отрицательные знаки локали. Несовместим с флагом ( |
! | Не включать символ валюты. Этот флаг полезен, если вы хотите использовать strfmon()sprintf() |
- | Выровнять результат слева. По умолчанию используется выравнивание справа. Этот флаг не действует без указания ширины поля |
Ширина поля является строкой десятичных цифр, представляющих минимальную ширину. По умолчанию использует столько символов, сколько необходимо, основываясь на оставшейся части спецификации. Значения, меньшие ширины поля, дополняются пробелами слева (или справа, если указан флаг '
-Точность слева состоит из символа
#=Наконец, точность справа состоит из символа '
.frac_digitsint_frac_digitsstruct lconvstrfmon()errnoE2BIGПомимо
strfmon()'printf()%i%d%u%f%F%g%Gch13-quoteflag.c/* ch13-quoteflag.c --- демонстрация флага кавычки printf */#include <stdio.h>#include <locale.h>int main(void) { setlocale(LC_ALL, ""); /* Это нужно, иначе не будет работать */ printf("%'dn", 1234567);return 0;}Вот что происходит для двух различных локалей: в одной есть разделитель тысяч, в другой нет:
$ <b>LC_ALL=C ch13-quoteflag</b> /* Обычное окружение без разделителя */1234567
