Нейл Мэтью - Основы программирования в Linux
- Название:Основы программирования в Linux
- Автор:
- Жанр:
- Издательство:«БХВ-Петербург»
- Год:2009
- Город:Санкт-Петербург
- ISBN:978-5-9775-0289-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Нейл Мэтью - Основы программирования в Linux краткое содержание
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стандартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.
Для начинающих Linux-программистов
Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Далее приведена синтаксическая запись функций:
#include
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();
Функция getc
эквивалентна fgetc
за исключением того, что может быть реализована как макрос. В этом случае аргумент stream
может определяться несколько раз, поэтому он лишен побочных эффектов (например, не затронет переменные). К тому же вы не можете гарантировать возможности применения адреса getc
как указателя функции.
Функция getchar
эквивалентна вызову функции getc(stdin)
и читает следующий символ из стандартного ввода.
fputc, putc и putchar
Функция fputc
записывает символ в файловый поток вывода. Она возвращает записанное значение или EOF
в случае аварийного завершения.
#include
int fputc(int с, FILE *stream); int putc(int c, FILE *stream); int putchar(int c);
Как и в случае функций fgetc/getc
, функция putc
— эквивалент fputc
, но может быть реализована как макрос.
Функция putchar
— то же самое, что вызов putc(с, stdout)
, записывающий один символ в стандартный вывод. Имейте в виду, что функция putchar
принимает, а функция getchar
возвращает символы как данные типа int
, а не char
. Это позволяет индикатору конца файла ( EOF
) принимать значение -1, лежащее вне диапазона кодов символов.
fgets и gets
Функция fgets
читает строку из файла ввода stream
.
#include
char *fgets(char *s, int n, FILE *stream);
char *gets(char *s);
Функция fgets
пишет символы в строку, заданную указателем s
, до тех пор, пока не встретится новая строка, либо не будет передано n-1
символов, либо не будет достигнут конец файла. Любая встретившаяся новая строка передается в строку, принимающую символы, и добавляется завершающий нулевой байт \0
. Любой вызов передает максимум n-1
символов, т.к. должен быть вставлен нулевой байт, обозначающий конец строки и увеличивающий общее количество до n байтов.
При успешном завершении функция fgets
возвращает указатель на строку s
. Если поток указывает на конец файла, она устанавливает индикатор EOF
для потока и возвращает пустой указатель. Если возникает ошибка чтения, fgets
возвращает пустой указатель и устанавливает значение переменной errno
, соответствующее типу ошибки.
Функция gets
аналогична fgets
за исключением того, что она читает из стандартного ввода и отбрасывает любые обнаруженные обозначения новой строки. Функция добавляет завершающий нулевой байт в принимающую строку.
Учтите, что функция gets
не ограничивает количество символов, которые могут передаваться, поэтому она может переполнить свой пересылочный буфер. По этой причине вам следует избегать применения этой функции и заменять ее функцией fgets
. Многие проблемы безопасности порождены функциями в программах, сделанных для переполнения буфера тем или иным способом. Это одна из таких функций, поэтому будьте осторожны!
Форматированные ввод и вывод
Для создания вывода управляемого вида существует ряд библиотечных функций, с которыми вы, возможно, знакомы, если программируете на языке С. К ним относятся функция printf
и родственные функции для вывода значений в файловый поток, а также scanf
и другие функции для чтения значений из файлового потока.
printf, fprintf и sprintf
Семейство функций printf
форматирует и выводит переменное число аргументов разных типов. Способ их представления в потоке вывода управляется параметром format
, являющимся строкой с обычными символами и кодами, называемыми спецификаторами преобразований, указывающими, как и куда выводить остальные аргументы.
#include
int printf(const char *format, ...);
int sprintf(char *s, const char *format, ...);
int fprintf(FILE * stream, const char *format, ...);
Функция printf
выводит результат в стандартный вывод. Функция fprintf
выводит результат в заданный файловый поток stream
. Функция sprintf
записывает результат и завершающий нулевой символ в строку s
, передаваемую как параметр. Эта строка должна быть достаточно длинной, чтобы вместить весь вывод функции.
У семейства printf
есть и другие члены, обрабатывающие свои аргументы различными способами. См. подробную информацию на страницах интерактивного руководства.
Обычные символы передаются в вывод без изменений. Спецификаторы преобразований заставляют функцию printf
выбирать и форматировать дополнительные аргументы, передаваемые как параметры. Спецификаторы всегда начинаются с символа %
. Далее приведен простой пример:
printf("Some numbers: %d, %d, and &d\n", 1, 2, 3);
Он порождает в стандартном выводе следующую строку.
Some numbers: 1, 2, and 3
Для вывода символа %
следует применять последовательность %%
, чтобы не путать его со спецификатором преобразования.
Далее перечислены наиболее часто применяемые спецификаторы преобразований:
□ %d
, %i
— выводить целое как десятичное число;
□ %о
, %x
— выводить целое как восьмеричное, шестнадцатеричное число;
□ %с
— выводить символ;
□ %s
— выводить строку;
□ %f
— выводить число с плавающей точкой (одинарной точности);
□ %e
— выводить число с двойной точностью в формате фиксированной длины;
□ %g
— выводить число двойной точности в общем формате.
Очень важно, чтобы число и тип аргументов, передаваемых функции printf
, соответствовали спецификаторам преобразования в строке format
. Необязательный спецификатор размера применяется для обозначения типа целочисленных аргументов.
Он может быть равен h
, например, %hd
для обозначения типа short int
(короткие целые), или l
, например, %ld
для обозначения типа long int
(длинные целые). Некоторые компиляторы могут проверять эти установки printf
, но они ненадежны. Если вы применяете компилятор GNU gcc, можно вставить для этого в команду компиляции опцию -Wformat
.
Далее приведен еще один пример:
char initial = 'А';
char *surname = "Matthew";
double age = 13.5;
printf("Hello Mr %c %s, aged %g\n", initial, surname, age);
Будет выводиться следующая информация:
Hello Mr A Matthew, aged 13.5
Вы можете добиться большего при выводе элементов с помощью спецификаторов полей. Они расширяют возможности спецификаторов преобразований, управляя расположением элементов при выводе. Обычно задается количество десятичных разрядов для числа с плавающей точкой или величина пробельных отступов, обрамляющих строку.
Читать дальшеИнтервал:
Закладка: