Текст программы для Linux (POSIX API)
#include <sys/types.h>
#include <sys/stat.h>
#include <wait.h>
#include <fcntl.h>
#include <stdio.h>
// Название: processFile
//Описание: обработка файла, подсчет кол-ва пробелов
// Входные параметры: fileName – имя файла для обработки
// Выходные параметры: кол-во пробелов в файле
//
int processFile( char *fileName)
{
nt handle, numRead, total = 0;
char buf;
// запрос к ОС на открытие файла (только для чтения)
handle = open( fileName, O_RDONLY);
// цикл чтения до конца файла
do
{
// чтение одного символа из файла
numRead = read( handle, &buf, 1);
if (buf = 0х20) total++;
} while (numRead > 0);
// закрытие файла
close( handle);
return( total);
}
// Название: main
// Описание: главная программа
// Входные параметры: список имён файлов для обработки
// Выходные параметры: нет
//
int main(int argc, char *argv[ ])
{
int i, pid, status;
// для всех файлов, перечисленных в командной строке
for (i = 1; i< argc; i++)
{
// запускаем дочерний процесс
pid = fork();
if (pid == 0)
{
// если выполняется дочерний процесс
// вызов функции счёта количества пробелов в файле
printf( "(PID: %d), File %s, spaces = %d\n", getpid(), argv[i], processFile( argv[i]));
// выход из процесса
exit();
}
// если выполняется родительский процесс
else
printf( "processFile started (pid = %d)\n", pid);
}
// ожидание окончания выполнения всех запущенных процессов
if (pid != 0) while (wait(&status )>0);
return;
}
Из этого текста видно, что в этом случае все вычисления принимают статус процессов, а не тредов.
В заключение можно заметить, что очень трудно сравнивать API. При их разработке создатели, как правило, стараются реализовать полный набор основных функций, используя которые можно решать различные задачи, хотя, порой, и различными способами. Один набор будет хорош для одного набора задач, другой – для иного набора задач. Тем более что фактически у нас сейчас существенно ограниченное множество API. Причина в том, что доминируют наиболее распространённые ОС, на распространение которых в большей степени оказали влияние не достоинства или недостатки этих ОС и их API, а правильная маркетинговая политика фирм, их создавших.
Контрольные вопросы и задачи
Вопросы для проверки
1 Перечислите и поясните основные принципы построения операционных систем.
2 Расскажите об основных моментах, характерных для микроядерных ОС. Какие основные функции должно выполнять микроядро ОС?
3 Перечислите основные требования, предъявляемые к операционным системам реального времени.
4 Какие задачи возлагаются на интерфейс прикладного программирования (API)?
5 Какими могут быть варианты реализации API? В чем заключаются достоинства и недостатки каждого варианта?
6 Что такое библиотека времени выполнения (RTL)?
7 Что такое POSIX? Какими преимуществами обладают программы, созданные с использованием только стандартных функций, предусмотренных POSIX?
Дата добавления: 2022-02-05; просмотров: 275;