Читайте также:
|
|
Теперь мы готовы к тому, чтобы написать первую программу в нашем курсе. Осталось только научиться компилировать программы на языке C и запускать их на счет. Для компиляции программ в UNIX мы будем применять компилятор gcc.
Для того чтобы он нормально работал, необходимо, чтобы исходные файлы, содержащие текст программы, имели имена, заканчивающиеся на. c.
В простейшем случае откомпилировать программу можно, запуская компилятор командой
gcc имя_исходного_файлаЕсли программа была написана без ошибок, то компилятор создаст исполняемый файл с именем a.out. Изменить имя создаваемого исполняемого файла можно, задав его с помощью опции -o:
gcc имя_исходного_файла -o имя_исполняемого_файлаКомпилятор gcc имеет несколько сотен возможных опций. Получить информацию о них вы можете в UNIX Manual.
Обычно во всех версиях UNIX имеется также компилятор с именем cc, поддерживающий опцию –о.
Запустить программу на исполнение можно, набрав имя исполняемого файла и нажав клавишу <Enter>.
Написание, компиляция и запуск программы c использованием системных вызовов getuid() и getgid()
Напишите, откомпилируйте и запустите программу, которая печатала бы идентификатор пользователя, запустившего программу, и идентификатор его группы.
Занятие 3. Взаимодействие процессов через pipe и FIFO в UNIX
Понятие о потоке ввода-вывода
Среди всех категорий средств коммуникации наиболее употребительными являются каналы связи, обеспечивающие достаточно безопасное и достаточно информативное взаимодействие процессов.
Существует две модели передачи данных по каналам связи – поток ввода-вывода и сообщения. Из них более простой является потоковая модель, в которой операции передачи/приема информации вообще не интересуются содержимым того, что передается или принимается. Вся информация в канале связи рассматривается как непрерывный поток байт, не обладающий никакой внутренней структурой.
Понятие о работе с файлами через системные вызовы и стандартную библиотеку ввода-вывода для языка C
Потоковая передача информации может осуществляться не только между процессами, но и между процессом и устройством ввода-вывода, например между процессом и диском, на котором данные представляются в виде файла. Поскольку понятие файла уже вам знакомо, а системные вызовы, использующиеся для потоковой работы с файлом, во многом соответствуют системным вызовам, применяемым для потокового общения процессов, мы начнем именно с механизма потокового обмена между процессом и файлом.
Из курса программирования на языке C вам известны функции работы с файлами из стандартной библиотеки ввода-вывода, такие как fopen(), fread(), fwrite(), fprintf(), fscanf(), fgets() и т.д. Эти функции входят как неотъемлемая часть в стандарт ANSI на язык C и позволяют программисту получать информацию из файла или записывать ее в файл при условии, что программист обладает определенными знаниями о содержимом передаваемых данных. Так, например, функция fgets() используется для ввода из файла последовательности символов, заканчивающейся символом '\n' – перевод каретки. Функция fscanf() производит ввод информации, соответствующей заданному формату, и т. д. С точки зрения потоковой модели операции, определяемые функциями стандартной библиотеки ввода-вывода, не являются потоковыми операциями, так как каждая из них требует наличия некоторой структуры передаваемых данных.
В операционной системе UNIX эти функции представляют собой надстройку – сервисный интерфейс – над системными вызовами, осуществляющими прямые потоковые операции обмена информацией между процессом и файлом и не требующими никаких знаний о том, что она содержит. Чуть позже мы кратко познакомимся с системными вызовами open(), read(), write() и close(), которые применяются для такого обмена, но сначала нужно ввести еще одно понятие – понятие файлового дескриптора.
Дата добавления: 2014-12-19; просмотров: 41 | Поможем написать вашу работу | Нарушение авторских прав |