
- •41. Программные семафоры с внутренним счетчиком в posix
- •Int sem_init(sem_t *sem, int pshared, int value);
- •42. Программные семафоры с внутренним счетчиком в System V
- •43. Проблема тупиков при взаимодействии программных единиц
- •44. Средства реализации виртуальной памяти; страничная переадресация.
- •45. Средства реализации виртуальной памяти; стратегия подкачки страниц
- •46. Системные функции распределения памяти в Unix
- •Void* malloc(size_t nbytes)
- •Void* MapViewOfFile(handle hFileMappingObject, dword DesiredAccess, dword OffsetHigh, dword OffsetLow, dword size)
- •49. Совместное использование оперативной памяти в Unix
- •Int shmget(key_t key, int size, int flag),
- •53. Программный опрос файловой системы в Windows
- •54. Программный опрос файловой системы в Unix
- •Int closedir(dir* dirptr),
- •Void rewinddir(dir* dirptr),
- •55. Получение информации об ошибках выполнения системной функции Windows
- •56. Получение информации об ошибках выполнения системной функции Unix.
- •Int имяфункции(список_аргументов),
- •Void perror(const char *s)
- •57. Групповое выполнение и фоновый запуск команд в командных оболочках ос.
- •59. Использование переменных в командных оболочках ос.
- •60. Ввод и вывод данных в командных сценариях.
53. Программный опрос файловой системы в Windows
В операционных системах типа Windows разработчики включили проверку условия для имени файла в действия соответствующей системной функции. В этой ОС основных функций, работающих с содержимым каталогов, – две: функция поиска первого файла по задаваемому условию и функция поиска следующего файла по тому же условию. Само условие задается как метанотация, т.е. записью совокупности файлов с помощью метасимволов * и ? в соответствующем аргументе имени файла. Использование этих метасимволов полностью совпадает с традиционным их применением в командах операционной системы, восходящим к правилам командного интерпретатора Unix.
В Windows для поиска первого файла в каталоге служит функция с прототипом
HANDLE FindFirstFile(char *metaname, WIN32_FIND_DATA *FindFileData),
Для поиска следующих файлов, удовлетворяющих той же метанотации, что была задана при выполнении функции FindFirstFile, в Windows служит функция с прототипом
BOOL FindNextFile(HANDLE hFindFile, WIN32_FIND_DATA *FindFileData),
Последняя функция возвращает значение TRUE, если находит очередной файл в текущем каталоге, удовлетворяющий метанотации, в противном случае она возвращает значение FALSE.
В завершение работы с каталогом должна вызываться функция с прототипом
BOOL FindClose(HANDLE hFindFile),
которая закрывает хэндл, ранее полученный от функции FindFirstFile.
Для вспомогательных действий по переустановке текущего каталога предназначена в Windows функция с прототипом
BOOL SetCurrentDirectory(char *PathName))
а также функция с прототипом
DWORD GetCurrentDirectory(DWORD BufferSize, char *Buffer)
которая позволяет запомнить в символьном массиве полное имя текущего каталога.
54. Программный опрос файловой системы в Unix
В ОС Unix операции с каталогом строятся подобно операциям с типизированными файлами, используемыми в Паскале, а именно, вводится указатель на структуру данных, описывающую каталог. Эта структура описана в заголовочном файле dirent.h и имеет имя DIR. Указатель на эту структуру данных используется для получения значения от функции opendir, имеющей прототип
DIR* opendir(char *dirname)
Дальнейшие действия выполняются системной функцией с прототипом
struct dirent *readdir(DIR* dirptr)
с аргументом, полученным от предыдущей функции. Каждое выполнение вызова readdir() возвращает указатель на содержимое структуры типа dirent, содержащей информацию об очередном элементе каталога. Эта структура данных описана также в заголовочном файле dirent.h. В последней структуре два основных поля, которые заданы в ней как
ino_t d_ino; /* Номер индексного дескриптора */
char d_name[ ]; /* Имя файла, заканчивающегося нулевым байтом*/
При использовании этих полей каталога следует иметь в виду, что нулевое значение поля d_ino вполне возможно у используемого каталога и обозначает неиспользуемую запись в каталоге (обычно по причине удаления информации о файле из данного каталога).
После окончания использования указателя на каталог, полученный от функции opendir(), следует выполнить закрытие доступа к каталогу и освобождение ресурсов вызовом функции с прототипом