Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 193 194 195 [ 196 ] 197 198 199 ... 210


Как укоротить файл без уничтожения или переписывания?

В системах BSD есть функция ftruncate(), несколько других систем поддерживают chsize(), в некоторых имеется (возможно, недокументированный) параметр fcntl F FREESP. В системе MS-DOS можно иногда использовать write(fd, , 0). Однако, полностью мобильного решения не существует.

Как реализовать задержку или определить время реакции пользователя, чтобы погрешность была меньше секунды?

У этой задачи нет, к несчастью, мобильных решений. Unix

V7 и ее производные имели весьма полезную функцию ftime() c

точностью до миллисекунды, но она исчезла в System V и Posix.

Поищите такие функции: nap(), setitimer(), msleep(), usleep(),

clock() и gettimeofday(). Вызовы select() и poll() (если эти функции

доступны) могут быть добавлены к сервисным функциям для

создания простых задержек. В системе MS-DOS возможно

перепрограммирование системного таймера и прерываний

таймера.

Как прочитать объектный файл и передать управление на одну из его функций?

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

В системе BSD Unix можно использовать system() и ld -A для динамической компоновки. Многие (большинство) версии SunOS и System V имеют библиотеку -ldl, позволяющую динамически загружать объектные модули. Есть еще GNU пакет, который называется dld .

Как выполнить из программы команду операционной системы?

Используйте system().

Как перехватить то, что выдает команда операционной системы?

Unix и некоторые другие операционные системы имеют функцию popen(), которая переназначает поток stdio каналу, связанному с процессом, запустившим команду, что позволяет прочитать выходные данные (ии передать входные). А можно просто перенаправить выход команды в файл, затем открыть его и прочесть.



Как получить содержимое директории в Си программе?

Выясните, нельзя ли использовать функции opendir() и readdir(), доступные в большинстве систем Unix. Реализации этих функций известны для MS-DOS, VMS и других систем. (MS-DOS имеет также функции findfirst и findnext, которые делают в точности то же самое).

Как работать с последовательными (COM) портами?

Это зависит от операционной системы. В системе Unix обычно осуществляются операции открытия, чтения и записи во внешнее устройство и используются возможности терминального драйвера для настройки характеристик. В системе MS-DOS можно либо использовать прерывания BIOSa, либо (если требуется приличная скорость) один из управляемых прерываниями пакетов для работы с последовательными портами.

Что можно с уверенностью сказать о начальных значениях переменных, которые явным образом не инициализированы? Если глобальные переменные имеют нулевое начальное значение, то правильно ли нулевое значение присваивается указателям и переменным с плавающей точкой?

Статические переменные (то есть объявленные вне

функций и те, что объявлены как принадлежащие классу static)

всегда инициализируются (прямо при старте программы) нулем,

как будто программист написал =0 . Значит, переменные будут

инициализированы как нулевые указатели (соответствующего

типа), если они объявлены указателями, или значениями 0.0, если

были объявлены переменные с плавающей точкой.

Переменные автоматического класса (т.е. локальные переменные без спецификации static), если они явно не определены, первоначально содержат мусор . Никаких полезных предсказаний относительно мусора сделать нельзя.

Память, динамически выделяемая с помощью malloc и realloc также будет содержать мусор и должна быть инициализирована, если это необходимо, вызывающей программой. Память, выделенная с помощью calloc, зануляет все биты, что не всегда годится для указателей или переменных с плавающей точкой.



Этот текст взят прямо из книги, но он не компилируется:

char a[] = Hello, world! ;

Возможно, ваш компилятор создан до принятия стандарта ANSI и еще не поддерживает инициализацию автоматических агрегатов (то есть нестатических локальных массивов и структур).

Чтобы выкрутиться из этой ситуации, сделайте массив статическим или глобальным, или инициализируйте его с помощью strcpy, когда вызывается f(). (Всегда можно инициализировать автоматическую переменную char * стрингом литер.)

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

Лучшее решение - использовать текстовые файлы (обычно

ASCII), c данными, записанными fprintf. Читать данные лучше

всего с помощью fscanf или чего-то подобного. (Такой же совет

применим для сетевых протоколов). К мнениям, что текстовые

файлы слишком велики и могут долго обрабатываться,

относитесь скептически.

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

Если необходимо использовать двоичный формат, переносимость данных можно улучшить (или получить выгоду от использования готовых библиотек ввода/вывода), если использовать стандартные форматы данных, такие как XDR (RFC 1014) (Sun), ASN.l(OSI), X.409 (CCITT), или ISO 8825 Основные правила кодирования .

Как вставить или удалить строку (или запись) в середине файла?

Придется, видимо, переписать файл.

Как возвратить из функции несколько значений?

Или передайте указатель на то место, которое будет заполнено функцией, или пусть функция возвращает структуру,



1 ... 193 194 195 [ 196 ] 197 198 199 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика