Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

osn_progr_final

.pdf
Скачиваний:
37
Добавлен:
12.02.2016
Размер:
3.27 Mб
Скачать

Ця функція повертає кількість успішно перетворених і призначених полів.

Див. також fscanf, printf, sscanf, vfprintf, vprintf, vsprintf.

SEGREAD <dos.h>

void segread (segregs);

struct SREGS *segregs; //значення регістрів сегмента Заповнює структуру, на яку вказує segregs, вмістом регі-

стрів сегмента. Ця функція може використовуватися разом з функціями intdosx і int86 для відновлення значення регістрів сегментів, які використовувались останніми.

Значення, що повертається, немає.

Див.також intdosx, int86x, FP_SEG.

SETBUF <stdio.h>

void setbuf(stream, buffer); FILE *stream

char *buffer; //буфер, заданий користувачем.

Дозволяє користувачу утворити власний буфер buffer для буферизації введення/виведення замість буфера, виділеного системою по замовчанню для потоку stream. Аргумент stream може посилатися на відкритий файл. Якщо аргумент buffer є NULL, то потік stream не буферизований; якщо потік буферизований, то buffer може вказувати на масив символів розміром BUFSIZ, де розмір BUFSIZ визначений у <stdio.h>.

Значення, що повертається немає.

SETJMP <setjmp.h>

int setjmp(env);

jmp_buf env; //змінна оточення.

Зберігає стан стеку, що може бути послідовно відновлений за допомогою використання функції longjmp.

Після збереження стану стеку функція setjmp повертає значення 0. Якщо в результаті виклику longjmp повертається setjmp, тоді повертається і значення value аргументу longjmp. У випадку помилки нічого не повертається.

Див. також longjmp.

SETMODE <fcntl.h>, <io.h>

int setmode(handle,mode);

int handle; //файловий дескриптор int mode; //новий режим

421

Встановлює режим перетворення mode файлу, заданого за допомогою handle.

Mode може бути однією із наступних констант: O_TEXT текстовий режим;

O_BINARY двійковий.

Повертає значення попереднього режиму у випадку успіху і - 1 у випадку помилки.

SETVBUF <stdio.h>

int setvbuf(stream, buf, type, size); FILE *stream;

char *buf; // буфер, призначений користувачем int type;

int size; //розмір буфера

Дозволяє користувачу керувати буферизацією і розміром буфера для потоку stream. При цьому встановлюється новий буфер користувача buf. Якщо він рівний NULL, то потік не буферизований. Тип type може бути _IONBF, _IOFBF, чи _IOLBF. Якщо використовується тип _IOFBF, розмір буфера визначається за допомогою size; якщо використовується тип _IOLBF чи _IONBF, потік є небуферизованим, а size і buf ігноруються.

Повертає ненульове значення, якщо тип чи розмір буфера неправильно визначений, і повертає значення 0 в противному випадку.

Див. також setbuf, fflush, fopen, fclose. SIGNAL <signal.h>

int (*signal(sig, func)(); int sig; //значення сигналу

int (*func)(); //виконувана функція

Дозволяє вибрати з операційної системи один із трьох способів обробки команди переривання. Аргумент sig може бути однією з констант SIGINT чи SIGFPE, визначених у <signal.h>. SIGINT відповідає у MS DOS команді переривання INT 23H. SIGFPE відповідає перериванням, що пов’язані з плаваючою крапкою, як наприклад переповнення, ділення на нуль, невірна операція. Аргумент func може бути однією із констант SIG_DFL чи SIG_IGN або адресою функції. При одержанні сигналу переривання дія залежить від значення func яке є наступним:

422

SIG_IGN – сигнал переривання ігнорується. Це значення для SIGFPE не задається, тому що стан процесу з плаваючою крапкою, залишається невизначеним.

SIG_DFL – викликаний процес завершений; керування передається на рівень команд операційної системи. Усі файли, які відкриті в процесі, закриваються, але буфери не оновлюються. Для сигналів SIGINT функції, на яку вказує func, передається аргумент SIGINT і вона виконується. Якщо функція завершується нормально, перерваний процес відновлює виконання з команди, наступної за тією, у якій був отриманий сигнал переривання. Перед виконанням специфікованої функції значення func встановлюється в SIG_DFL; наступний сигнал переривання трактується як і для SIG_DFL, якщо зовнішній виклик signal, що задає інше значення переривання, не визначений. Це дозволяє користувачу перевстановлювати сигнали у функціях, що викликаються. Для SIGFPE функції, на яку вказує func, передаються два аргументи – SIGFPE і цілий підкод помилки, FPE-xxx-, і потім вона виконується. Значення func не перевстановиться доти, доки не буде отриманий сигнал переривання; для виходу зі стану плаваючої крапки використовується setjmp разом з longjmp. Якщо функція завершується нормально, перерваний процес відновлюється в невизначеному стані плаваючої крапки.

Повертає попереднє значення func. У випадку помилки повертається -1.

SIN-SINH <math.h> double sin(x); double x; //радіани

Повертає синус x double sinh(x);

Повертає гіперболічний синус x.

SOPEN <fentl.h>, <sys\types.h>,<sys\stat.h>, <sharc.h>, <io.h> int sopen(pathname,oflag,shflag{,pmode]);

char *pathname; // path-ім’я файлу int oflag; //тип дозволених операцій int shflag; // дозволений тип поділу int pmode; // дозволений тип доступу

Відкриває файл, заданий за допомогою path-імені, і готує його до наступного читання чи запису, що визначається

423

перед кожною операцією запису переміщає вказівник на файл у кінець файлу.
новий файл створений і відкритий для запису.
повертається значення помилки, якщо існує файл з path-ім’ям.
файл відкритий тільки для читання. Якщо задано цей прапорець, також може бути вибраний прапорець O_RDWR чи
O_WRONLY.
файл відкритий одночасно для читання і запису; якщо задається цей прапорець, те може бути обраний прапорець O_RDONLY
чи O_WRONLY.
існуючий файл відкритий і усічений до довжини 0; цей файл повинний мати дозвіл на запис. Вміст файлу знищується.
файл відкритий тільки для читання; якщо задано цей прапор, повинний бути заданий прапор O_RDONLY чи O_RDWR.
файл відкритий у двійковому режимі. (Див. опис двійкового режиму у функції fopen). файл відкритий у текстовому режимі.

значенням oflag чи shflag. Oflag є цілим виразом, що складається з комбінації однієї чи декількох констант, оголошених у <fcntl.h>:

O_APPEND

O_CREAT

O_EXCL

O_RDONLY

O_RDWR

O_TRUNC

O_WRONLY

O_BINARY

O_TEXT

Значення shflag:

SH_COMPAT встановлюється режим сумісності; SH_DENYRW доступ на читання і запис у файлі не дозволений;

SH_DENYWR доступ на запис у файлі не дозволений; SH_DENYRD доступ на читання у файлі не дозволений; SH_DENYNO доступ на читання і запис дозволений. Аргумент pmode потрібен тільки тоді, коли визначена константа 0_CREAT. Якщо файл не існує, pmode також визначає тип доступу для файлу, що встановлюються під час першого закриття нового файлу. У противному випадку аргумент pmode ігнорується. Аргумент pmode є цілим виразом, що міс-

424

тить одну чи більше констант S_IWRITE та S_IREAD, оголошених у <sys\stat.h>. Коли задаються обидві константи, вони об’єднуються оператором АБО(|). Значення аргументу pmode наведено нижче:

КОНСТАНТА

ЗНАЧЕННЯ

S_IWRITE

дозволено запис;

S_IREAD

дозволено читання;

S_IREAD|S_IWRITE

дозволено читання і запис.

Якщо запис не дозволений, файл призначений тільки для читання.

Функція sopen повертає дескриптор handle на відкритий файл або -1 у випадку помилки.

SPAWNL-SPAWNVPE <stdio.h>,<process.h>

int spawnl(modeflag,pathname,arg0,arg1...,argn,NULL);

int spawnle(modeflag,pathname,arg0,arg1...,argn,NULL,envp); int spawnlp(modeflag,pathname,arg0,arg1...,argn,NULL);

int spawnlpe(modeflag,pathname,arg0,arg1...,argn,NULL,envp); int spawnv(modeflag,pathname,argv);

int spawnve(modeflag,pathname,argv,envp); int spawnvp(modeflag,pathname,argv);

int spawnvpe(modeflag,pathname,argv,envp);

int modeflag; //режим виконання батьківського процесу char *pathname; //path-ім’я виконуваного файлу

char *arg0,*arg1...,*argn;//список вказівників на аргументи char *argv[]; //масив вказівників на аргументи

char *envp[]; //масив вказівників на оточення

Функції spawn створюють і виконують новий дочірній процес. Для завантаження і виконання дочірнього процесу повинно бути достатньо пам’яті. Аргумент modeflag визначає дії батьківського процесу перед і протягом spawn. Значення modeflag оголошені в <process.h>:

P_WAIT припиняє батьківський процес, доки не завершиться дочірній процес;

P_NOWAIT продовжує виконання батьківського процесу паралельно з дочірнім процесом;

P_OVERLAY батьківський процес перекривається дочірнім процесом; батьківський процес знищується (та ж дія, що і при викликах exec).

425

Можуть використовуватися тільки значення modeflag, такі як

P_WAIT та P_OVERLAY. Значення P_NOWAIT зберігається для можливої майбутньої реалізації. Якщо використовується P_NOWAIT, повертається значення помилки.

Аргумент pathname визначає файл, виконуваний як дочірній процес. Якщо pathname не має розширення для імені файлу чи якщо воно не закінчується крапкою (.), то функція spawn встановлює розширення .EXE. Якщо pathname має розширення, то використовується тільки це розширення. Якщо pathname закінчується крапкою, spawn здійснює пошук pathname без розширення. Процедури execlp, execlpe, execvpe

здійснюють пошук для pathname (використовують ті самі процедури) у каталогах, визначених змінною оточення

PATH.

Аргументи для нового процесу передаються як аргументи виклику spawn, що є вказівниками на символьні рядка. Ці символьні рядки утворять список аргументів для дочірнього процесу. Загальна довжина рядків, що утворять список аргументів для нового процесу, не може перевищувати 128 байт.

Вказівники аргументів можуть передаватися як окремі аргу-

менти (у execl, execle, execlp, execlpe) чи як масив вказівників (у execv, execve, execvp, execvpe). Принаймні один аргумент - arg0 чи argv[0] – має передаватися до дочірнього процесу. За умовою цей аргумент є копією аргументу pathname. NULLвказівник, що йде за аргументом argn, визначає кінець списку аргументів.

Виклики execl, execle, execlp, execlpe звичайно використо-

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

Виклики execv, execve, execvp, execvpe використовуються,

коли кількість аргументів для нового процесу є змінною. Файли, відкриті при виклику spawn, залишаються відкритими в новому процесі. У викликах execl, execlp, execv, execvp, до-

чірній процес успадковує оточення батьківського процесу.

Виклики execle, execlpe, execve, execvpe дозволяють користу-

вачу змінювати оточення для дочірнього процесу, передаючи список встановленого оточення через аргумент envp. Значення, що повертається, є статусом виходу з дочірнього процесу. Статус виходу дорівнює 0, якщо процес нормально завершений. Статус виходу встановлюється в ненульове зна-

426

чення, якщо дочірній процес викликає процедуру exit разом з ненульовим аргументом. Якщо статус не встановлений, то позитивний статус виходу вказує на непередбачений вихід із програми по abort чи перериванню. Значення, що повертається -1 свідчить про помилку (дочірній процес не стартував).

Див. також abort, execl, execle, execlp, execlpe, execv, execve, execvp, execvpe, exit, _exit, onexit, system.

SPRINTF <stdio.h>

int sprintf(buffer, format-string[, argument...]); char *buffer; // пам’ять для збереження виводу char *format-string; //рядок керування форматом

Функція sprintf форматує і запам’ятовує набори символів і значень у buffer. Кожен аргумент argument перетворюється і виводиться відповідно до специфікації формату у format-string. Format-string має таку ж саму форму і функцію, що аргумент format-string для функції printf.

Функція sprintf повертає кількість символів, записаних у buffer.

Див. також fprintf, printf, sscanf.

SQRT <math.h> double sqrt(x);

double x; //невід’ємне значення з плаваючою крапкою Обчислює і повертає квадратний корінь x.

SRAND <stdlib.h>

void srand(seed);

unsigned seed; //початкове число для генерації випадкових чисел

Встановлює початкове значення для генерації множини псевдовипадкових чисел.

Як аргумент seed для перевстановлення генератора використовується 1. Будь-яке інше значення seed встановлює генератор у випадкове початкове число.

Значення, що повертається, немає. Див. також rand.

SSCANF <stdio.h>

int sscanf(buffer, format-string[, argument...]); char *buffer; //збережені дані

char *format-string; //форматний рядок

427

Читає дані із buffer у відповідні аргументи arguments. Кожен argument повинен бути вказівником на змінну відповідного типу, визначеного у format-string. Format-string має ту ж саму форму і функцію, що й аргумент format-string для фу-

нкції scanf.

Функція sscanf повертає кількість успішно перетворених і ініціалізованих полів. Значення EOF повертається при спробі зчитування кінця рядка. Значення 0, що повертається, означає, що немає проініціалізованих полів.

Див. також fscanf, scanf, sprintf.

STACKAVAIL <malloc.h> unsigned int stackavail();

Повертає приблизний розмір стека у байтах, доступного для динамічного розміщення пам’яті за допомогою функції alloca.

Повертає розмір у байтах як беззнакове ціле.

Див. також alloca, freect, memavl.

STAT <sys\types.h> <sys\stat.h> int stat(pathname, buffer);

char *pathname; //path-ім’я існуючого файлу struct stat *buffer; //вказівник на рядок результату

Функція stat одержує інформацію про файл чи папку визначену за допомогою pathname, і запам’ятовує її в структурі, на яку вказує buffer. Структура stat, оголошена в <sys\stat.h>, містить наступні поля:

st_mode

Бітова маска для інформації про режим файлу.

 

Біт S_IFDIR встановлюється, якщо pathname ви-

 

значає каталог; біт S_IFREG встановлюється,

 

якщо pathname посилається на звичайний файл.

 

Біти читання/запису встановлюються користу-

 

вачем відповідно до режиму доступу до файла.

st_dev

Номер пристрою диска, де міститься файл.

st_rdev

Номер пристрою диска, де міститься файл (ана-

 

логічно st_dev).

st_nlink

Завжди 1.

st_size

Розмір файла в байтах.

st_atime

Час останньої модифікації файла.

st_mtime

Час останньої модифікації файла (аналогічно

 

st_atime).

428

st_ctime Час останньої модифікації файла (аналогічно st_atime і st_mtime).

Повертає значення 0, якщо отримана інформація про статус файла. Значення, що повертається -1 свідчить про помилку.

Див. також access, fstat.

_STATUS87 <float.h>

unsigned int _status87();

Отримує статус плаваючої крапки. Слово статусу є комбінацією 8087/80287 та інших станів, таких як переповнення та втрата значимості.

Біти в значенні, що повертається, позначають статус плаваючої крапки.

Повний опис див. у <float.h>.

Див. також _clear87, _control87.

STRCAT-STRDUP <string.h>

char *strcat(string1,string2); char *string1; //приймач-рядок char *string2; //джерело-рядок

Дописує string2 до string1, дописує нуль-символ і повертає вказівник на string1.

char *strchr(string,c);

char *string; // джерело-рядок int c; // символ, що шукається

Повертає вказівник на перше входження c у string. Символ c може бути нульовим символом ‘\0’. Функція повертає NULL, якщо символ не знайдений.

int strcmp(string1,string2); char *string1;

char *string2;

Порівнює лексикографічно рядки string1 та string2 і по-

вертає значення:

 

ЗНАЧЕННЯ

ЗМІСТ

 

менше 0

string 1 менше string 2;

0

string 1

дорівнює string 2;

більше 0

string 1

більше string 2.

int stricmp(string1,string2); char *string1;

char *string2;

Порівнює рядки не враховуючи регістр.

429

char strcpy(string1,string2); char *string1; // приймач-рядок char *string2; //джерело-рядок

Копіює string2 у string1 і повертає string1. int strspn(string1,string2);

char *string1; //джерело-рядок char *string2; //підрядок символів

Повертає індекс першого символа в рядку string1, що не входить в string2.

char *strdup(string);

char *string; //джерело-рядок

Виділяє пам’ять для копіювання string1, копіює string1 і повертає вказівник на цю область пам’яті.

int strcmpi(string1,string2); char *string1;

char *string2;

Порівнює рядки не враховуючи регістр.

Функції strcat, strchr, strcmp, strcmpi, strcpy, strspn, strdup, stricmp працюють з рядками, що закінчуються ‘\0’ символом.

Див. також strncat, strncmp, strncpy, strrchr, strspn. STRERROR <string.h>

char *strerror(string);

char *string; //повідомлення користувача int errno; //лічильник помилок

int sys_nerr; //лічильник повідомлень системи

char sys_errlist[sys_nerr];//масив повідомлень про помилки Якщо string дорівнює NULL, функція strerror повертає

вказівник на рядок, що містить системне повідомлення про помилку для останнього бібліотечного виклику, у якому вироблена помилка; цей рядок закінчується символом нового рядка (‘\n’).

Якщо string не дорівнює NULL, strerror повертає: вказівник на рядок, що містить повідомлення про помилку, яке утворюється користувачем; двокрапку; пропуск; системне повідомлення про помилку для останнього бібліотечного виклику, що виробив помилку; і символ нового рядка (‘\n’). Повідомлення користувача може мати максимальну довжину до 94 байт.

На відміну від perror, strerror не друкує ніяких повідомлень.

430

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