- •1)Права доступа к файлу
- •2)Родительский процесс, порожденный, «сирота»
- •3)Системные вызовы fork, exec ,wait.
- •4)Файловая система. Системные вызовы mount, umount.
- •5)Файловая система. I-nodes.
- •6)Жесткая и символическая ссылки.
- •7)Схема переходов процесса из состояния в состояние
- •8)Системные вызовы getpid, getppid
- •9)Системный вызов times. Ядерная и пользовательские фазы процессов.
- •10)Программные каналы. Fifo-файлы.
- •11)Очередь сообщений. Последовательность системных вызовов.
- •12) Параметры функции msgget.
- •13)Параметры функции msgsnd.
- •14)Параметры функции msgrcv.
- •15)Параметры функции msgctl.
- •16)Семафоры. Последовательность системных вызовов.
- •17)Параметры функции semget.
- •18)Параметры функции semop.
- •19)Параметры функции semctl.
- •20)Разделяемая память. Последовательность системных вызовов.
- •21)Параметры функции shmget.
- •22)Параметры функции shmat.
- •23)Параметры функции shmdt.
- •24)Параметры функции shmctl.
- •25)Последовательность системных вызовов при работе с socket.
- •26)Потоки стандарта Posix.1c
- •27) Системный вызов pthread_create.
- •28)Системные вызовы pthread_self,exit и sched_yield
- •29) Системные вызовы pthread_join kill
- •30) Взаимоисключающие блокировки. Пример тупиковой ситуации.
- •34)Условные переменные
- •35) Системные вызовы pthread_cond_init, pthread_cond_signal и pthread_cond_timedwait. Их предназначение и параметры.
- •36) Системные вызовы pthread_cond_broadcast, pthread_cond_wait и pthread_cond_destroy. Их предназначение и параметры.
- •38) Системный вызов sem_open. Его предназначение и параметры.
- •39) Системные вызовы sem_init. Его предназначение и параметры.
- •40) Системные вызовы sem_getvalue, sem_wait и sem_close. Их предназначение и параметры.
- •41) Системные вызовы sem_trywait и sem_unlink. Их предназначение и параметры.
- •42) Системные вызовы sem_post и sem_destroy. Их предназначение и параметры.
- •43.Последовательность вызовов api серверного гнезда.
- •44.Последовательность вызовов api клиентского гнезда.
- •45.Последовательность вызовов api дейтаграммного гнезда.
- •46.Предназначение системного вызова socket().
- •47.Предназначение системного вызова bind().
- •48.Предназначение системного вызова listen().
- •49.Предназначение системного вызова accept().
- •50.Предназначение системного вызова connect().
- •51.Предназначение системных вызовов send() и sendto().
- •52.Предназначение системных вызовов recv() и recvfrom().
50.Предназначение системного вызова connect().
Прототип функции connect выглядит так:
#include <sys/types.h> #include <sys/socket.h>
int connect ( Int sid, struct sockaddr* addr p, int len );
Эта функция вызывается в клиентском процессе для установления соединения с серверным гнездом.
Аргумент sid представляет собой дескригггор гнезда, возвращенный функцией socket. В BSD 4.2 и 4.3 имя гнезда, указанное аргументом sid, совпадает с именем используемого транспортного протокола. В System V.4 имя гнезду присваивается транспортным протоколом.
Аргумент addr р - это указатель на адрес объекта типа struct sockaddr, хранящего имя серверного гнезда, с которым должно быть установлено соединение. Фактически структура этого объекта зависит от домена, на основе которого создается гнездо. Возможный формат - struct sockaddr (для домена UNIX) или struct sockaddrjn (для домена Internet).
Аргумент len задает размер объекта (в байтах), на который указывает аргумент addr j).
Если sid обозначает потоковое гнездо, то между клиентским и серверным гнездами устанавливается соединение с использованием виртуального канала.
Потоковое гнездо клиента может соединяться с гнездом сервера только один раз. Если sid обозначает дейтаграммное гнездо, то для всех последующа вызовов функции send, осуществляемых через это гнездо, устанавливается адрес по умолчанию. Дейтаграммное гнездо может соединяться с гнездом сервера многократно, изменяя установленные по умолчанию адреса. Путем соединения с гнездом, имеющим NULL-адрес, дейтаграммные гнезда могут разорвать соединение.
При успешном выполнении эта функция возвращает О, а в случае неудачи -1. j
51.Предназначение системных вызовов send() и sendto().
Прототип функции send выглядит следующим образом:
#include <sys/types.h> #include <sys/socket.h>
int send ( int sid, const char* buf, int len, int flag );
Эта функция передает содержащееся в аргументе buf сообщение длиной Men байтов в гнездо, заданное аргументом sid и соединенное с данным гнездом.
Аргументу flag обычно присваивается значение О, но он может иметь и значение MSG OOB. В этом случае сообщение, содержащееся в buf должно бьггь передано как высокоприоррггетное (out-of-band message).
Через гнезда можно передавать сообщения двух типов: обычные и высокоприоритетные. По умолчанию все сообщения, передаваемые гнездом, являются обычными, если явно не указано, что они высокоприоритетные. Если из гнезда передается более одного сообщения одного типа, другое гнездо принимает их по алгоррггму FIFO. Гнездо-получатель может выбрать тип сообщений, которые оно хотело бы получать. Сообщения с высоким приоррггетом следует использовать только в экстренных случаях.
Если процесс пользуется гнездом с установлением соединения или гнездом без установления соединения, для которого указан адрес получателя по умолчанию (посредством вызова функции connect), он может передавать обычные сообщения с помощью либо API send, либо API write. При этом функции send и sendto можно использовать для передачи сообщений нулевой длины, а write - нельзя. Кроме того, в BSD 4.2 и 4.3 функция write при обращении к гнезду, соединение с которым не установлено, дает сбой. В System V.4 такой вызов вроде бы выполняется успещно, но никакие данные не передаются.
В случае неудачи эта функция возвращает -1; в случае успешного выполнения возвращается число переданных байтов данных.
Функция sendto
Прототип функции sendto выглядит следующим образом:
#include <sys/types.h> #include <sys/socket.h>
int sendto ( int sid, const char* buf, int len, int flag,
struct soclcaddr* addr p, int* len p );
Эта функция делает то же самое, что и API send, только вызывающий процесс указывает также адрес гнезда-получателя (в аргументах addr р И 1еп р).
Аргументы sid, buf, len и flag - те же самые, что в API send. Аргумент addr p - это указатель на объект, который содержит имя гнезда-получателя. Аргумент len р содержит число байтов в объекте, на который указывает аргумент addr р.
В случае неудачи данная функция возвращает -1; в случае успещного выполнения возвращается число переданных байтов данных.