» » » Нейл Мэтью - Основы программирования в Linux


Авторские права

Нейл Мэтью - Основы программирования в Linux

Здесь можно скачать бесплатно "Нейл Мэтью - Основы программирования в Linux" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство «БХВ-Петербург», год 2009. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Нейл Мэтью - Основы программирования в Linux
Рейтинг:
Название:
Основы программирования в Linux
Автор:
Издательство:
«БХВ-Петербург»
Год:
2009
ISBN:
978-5-9775-0289-4
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Основы программирования в Linux"

Описание и краткое содержание "Основы программирования в Linux" читать бесплатно онлайн.



В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.

Для начинающих Linux-программистов






#include <stdio.h>

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

int sscanf(const char *s, const char *format, ...);

Очень важно, чтобы переменные, используемые для хранения значений, считываемых функциями scanf, имели корректный тип и точно соответствовали строке формата. Если это не так, используемая память может быть искажена и программа может завершиться аварийно. При этом не будет обнаружено никаких ошибок компиляции. Если повезет, вы можете получить предупреждающее сообщение!

Строка format функции scanf и других функций этого семейства, как и в случае функции printf, содержит как обычные символы, так и спецификаторы преобразований. Но обычные символы применяются для задания символов, которые должны присутствовать во вводе.

Рассмотрим простой пример:

int num;

scanf("Hello %d", &num);

Вызов функции scanf будет успешным, только если следующие пять символов в стандартном вводе — Hello. Затем, если следующие символы формируют распознаваемое десятичное число, оно будет считано и присвоено переменной num. Пробел в строке формата при вводе применяется для игнорирования во вводном файле всех пробельных символов (пробелы, табуляции, переводы страницы и переходы на новую строку) между спецификаторами преобразований. Это означает, что вызов, scanf будет успешным и поместит 1234 в переменную num в случае следующих двух вариантов ввода.

Hello    1234

Hellol234

Пробельные символы обычно игнорируются во вводе, когда начинается преобразование. Это означает, что строка формата %d будет продолжать чтение из вводного файла, пропуская пробелы и переходы на новую строку до тех пор, пока будет продолжаться цифровая последовательность. Если ожидаемые символы отсутствуют, преобразование аварийно завершается и выполнение функции прекращается.

Примечание

Если не соблюдать осторожность, могут возникнуть проблемы. В вашей программе может появиться бесконечный цикл, если во вводе оставить нецифровой символ при считывании целых чисел.

К другим спецификаторам преобразований относятся следующие:

%d — считывание десятичного целого;

%o, %x — считывание восьмеричного, шестнадцатеричного целого;

%f, %e, %g — считывание числа с плавающей запятой;

%c — считывание символа (пробельный символ не пропускается);

□ %s — считывание строки;

□ %[] — считывание множества символов (см. последующее обсуждение);

□ %% — считывание знака %.

Как и в случае printf, у спецификаторов преобразований функции scanf есть ширина поля, ограничивающая объем ввода. Спецификатор размера (h для коротких или l для длинных целых) показывает, короче или длиннее стандартного получаемый аргумент. Таким образом, %hd обозначает число типа short int, %ld — число типа long int и %lg — число с плавающей точкой двойной точности.

Спецификатор, начинающийся со звездочки, указывает на то, что элемент игнорируется. Это значит, что информация не сохраняется, и, следовательно, для ее получения не нужна переменная.

Применяйте спецификатор %c для чтения одиночного символа во вводе. Он не пропускает начальные пробельные символы.

Используйте спецификатор %s для чтения строк, но будьте осторожны. Он пропускает ведущие пробельные символы, но останавливается перед первым пробельным символом, встретившимся в строке, поэтому лучше применять его для чтения слов, а не целых строк. Кроме того, длина строки, которую он может прочесть, ограничивается только спецификатором ширины поля, поэтому принимающая строка должна быть достаточной для хранения самой длинной строки из вводного потока.

Лучше применять спецификатор ширины поля или комбинацию функций fgets и sscanf для считывания строки ввода, а затем просматривать ее. Это защитит от возможных переполнений буфера, которые может спровоцировать злонамеренный пользователь.

Применяйте спецификатор %[] для чтения строки, составленной из символов, включенных в множество. Формат %[A-Z] будет читать строку из прописных букв латинского алфавита. Если в множестве первый символ — знак вставки (^), то спецификатор считывает строку, состоящую из символов, не входящих в множество. Итак, для того чтобы прочитать строку с пробелами, но остановиться на первой запятой, примените спецификатор %[^, ].

Если задана следующая строка ввода:

Hello, 1234, 5.678, X, string to the end of the line

приведенный далее вызов scanf корректно считает четыре элемента:

char s[256];

int n;

float f;

char c;


scanf("Hello, %d, %g, %c, %[^\n]", &n, &f, &c, s);

Функции семейства scanf возвращают количество успешно считанных элементов. Оно может быть нулевым, если сбой возник при чтении первого элемента. Если достигнут конец ввода прежде, чем найдено соответствие первому элементу, возвращается EOF. Если в файловом потоке возникает ошибка чтения, устанавливается флаг ошибки потока и тип ошибки задается в переменной errno. Более подробную информацию см. в разд. "Ошибки потока" далее в этой главе.

Функция scanf и другие члены семейства, как правило, не высоко ценятся в основном по трем причинам:

□ традиционно их реализации полны ошибок;

□ в использовании эти функции не гибки;

они могут привести к созданию программного кода, в котором трудно решить, что подвергать синтаксическому анализу.

В качестве альтернативы попытайтесь применять другие функции, такие как fread или fgets, для чтения строк ввода, а затем воспользуйтесь строковыми функциями для разделения введенной строки на нужные элементы.

Другие потоковые функции

В библиотеке stdio существует ряд других функций, использующих потоки как параметры или стандартные потоки stdin, stdout, stderr:

□ fgetpos — возвращает текущую позицию в файловом протоке;

□ fsetpos — устанавливает текущую позицию в файловом потоке;

□ ftell — возвращает величину текущего смещения файла в потоке;

□ rewind — сбрасывает текущую позицию файла в потоке и переводит ее в начало файла;

□ freopen — повторно использует файловый поток;

□ setvbuf — задает схему буферизации для потока;

□ remove — эквивалент функции unlink, до тех пор пока параметр path не является каталогом, в этом случае она эквивалентна функции rmdir.

Эти библиотечные функции описаны на страницах интерактивного справочного руководства в разделе 3.

Вы можете использовать функции обработки файловых потоков для повторной реализации с их помощью программы копирования файлов. Взгляните на программу copy_stdio.c в упражнении 3.3.

Упражнение 3.3. Третья версия программы копирования файлов

Эта программа очень похожа на предыдущие версии, но посимвольное копирование выполняется с помощью вызовов функций, заданных в файле stdio.h:

#include <stdio.h>

#include <stdlib.h>


int main() {

 int c; 

 FILE *in, *out;

 in = fopen("file.in", "r");

 out = fopen("file.out", "w");

 while((c = fgetc(in)) != EOF) fputc(c, out);

 exit(0);

}

Выполнив эту программу, как прежде, вы получите:

$ TIMEFORMAT="" time ./copy_stdio

0.06user 0.02system 0:00.11elapsed 81%CPU

Как это работает

На этот раз программа выполняется 0,11 с, не так быстро, как низкоуровневая блочная версия, но значительно быстрее другой посимвольной версии. Это произошло потому, что библиотека stdio поддерживает внутренний буфер в структуре FILE, и низкоуровневые системные вызовы выполняются, только когда буфер заполняется. Не ленитесь экспериментировать, тестируя программный код построчного и блочного копирования с помощью stdio, чтобы увидеть, как они действуют в случае проверенных нами трех примеров.

Ошибки потока

Для обозначения ошибок многие функции библиотеки stdio применяют значения за пределами допустимых, например, пустые указатели или константу EOF. В этих случаях ошибка указывается во внешней переменной errno.

#include <errno.h>

extern int errno;

Примечание

Имейте в виду, что многие функции могут изменять значение errno. Оно достоверно, только когда функция закончилась неудачно. Вам следует проверять это значение сразу же, как функция сообщила о сбое. Прежде чем использовать его, скопируйте это значение в другую переменную, поскольку функции вывода, такие как fprintf, могут сами изменять errno.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Основы программирования в Linux"

Книги похожие на "Основы программирования в Linux" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Нейл Мэтью

Нейл Мэтью - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Нейл Мэтью - Основы программирования в Linux"

Отзывы читателей о книге "Основы программирования в Linux", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.