Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГЗ.docx
Скачиваний:
3
Добавлен:
13.09.2019
Размер:
277.44 Кб
Скачать

Закрытие файла.

Системный вызов close() закрывает файл: его элемент в системной таблице дескрипторов файлов помечается как неиспользуемый, и с этим дескриптором нельзя производить никаких дальнейших действий. То есть этот вызов освобождает файловый дескриптор. Системный вызов close() объявлен в файле unistd.h следующим образом:

#include <unistd.h>

int close (int fd);

В случае успеха возвращается 0, при ошибке возвращается -1. При возникновении ошибки нельзя ничего сделать, кроме сообщения о ней. Код ошибки присваивается переменной errno.

Запись в файл.

Вызов write() представляет собой эквивалент read() и также определен в POSIX:

#include<unistd.h>

#include<sys/types.h>

ssize_t write(int fd, const void *buf, size_t size);

При вызове write(), начиная с текущей позиции в файле, указанном при помощи файлового дескриптора fd, в него записывается до size байтов из буфера buf. Файлы, представляющие объекты, которые не поддерживают поиск, всегда записываются начиная с «головы».

В случае успеха возвращается количество записанных байтов, а позиция в файле соответствующим образом обновляется. В случае ошибки возвращается значение -1 и соответствующим образом устанавливается переменная errno. Вызов write() может вернуть значение 0, но оно всего лишь указывает, что было записано ноль байт.

Строки. Строковые константы.

Строкова константа, строковый литерал, или просто литерал – это последовательность из нескольких (в частном случае ни одного) символов, заключенных в двойные кавычки. Кавычки не являются частью строки, а только ограничивают ее. Формально строковая константа как и строка является массивом символов. Во внутреннем представлении строки в конце присутствует нулевой символ ‘\0’, так что физический объем памяти для хранения строки превышает количество символов, записанных между кавычками, на единицу. Это означает, что на длину строки не накладываются никакие ограничения, но

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

Функция sprintf().

Функция sprintf() выполняет те же преобразования, что и printf, но помещает результат вывода в символьную строку.

Синтаксис:

#include <stdio.h>

int sprintf(char *string, const char *format, apr1, apr2, … )

Функция sprintf() форматирует аргументы apr1, apr2 и т.д., согласно строке формата format, но результат помещается не в поток вывода (stdout), а в строку string (массив выводимых данных). Предполагается, что string имеет достаточную для этого длину.

Функция strlen().

Строка рассматривается как массив символов типа char, заканчивающийся нулевым байтом. Нулевой байт – это байт, каждый бит которого равен нулю. Для него введен специальный символ ‘\0’. Это следует учитывать при описании соответствующего массива символов. То есть если массив хранит 10 символов, то нужно предусмотреть 11 символ – нулевой байт.

Синтаксис:

#include <string.h>

int strlen(char *string);

Для определения длины строки в Си существует функция strlen(). Стандартная библиотечная функция strlen() возвращает количество символов в строке, переданной ей в качестве аргумента, не считая завершающего ‘\0’. Функция strlen() и другие функции для работы со строками объявлены в стандартном заголовочном файле <string.h>.

Функция strlen( ) позволяет определять точную длину строки числом символов. Результат операции sizeof оказывается на единицу большим, поскольку при этом учитывается и "невидимый" нуль-символ, помещенный в конец строки. Мы не указываем компилятору, какой объем памяти он должен отвести для размещения всей фразы, он сам подсчитывает число символов между кавычками.

Функция getenv() ищет в списке окружения строку, совпадающую со строкой, указанной вname. Строки имеют вид имя = значение.  

Функция getenv() возвращает указатель на значение в окружении или NULL, если ничего не найдено. Sysinfo - возвращает общесистемную статистику.

Uname - сообщает информацию о данном компьютере и операционной системе.

Системные вызовы нужны для работы с системой, они работают напрямую с ядром.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]