Как использовать открытый системный вызов в C

How Use Open System Call C



Системные вызовы используются в дистрибутивах Linux для обеспечения доступа к ОС Linux и программам. Операционная система Linux использует библиотеку Glibc для поддержки системных вызовов в ней при использовании языка C. Есть еще много способов использовать системные вызовы. В этой статье мы обсудим системный вызов open в системе Linux. Системный вызов Open использовался для быстрого открытия файла, указанного в пути. Он сообщает нам о файловом дескрипторе файла, созданного пользователем. Мы использовали Ubuntu 20.04 для практического использования системного вызова Open.

Установить библиотеки

Для языка C в качестве предварительных условий должны быть установлены некоторые дополнительные пакеты библиотек. Прежде всего, вам необходимо установить пакет manpages-dev, чтобы проверить информацию о системных вызовах. Откройте терминал командной строки из области действий и выполните приведенную ниже инструкцию для установки страниц руководства.







$ sudo apt install manpages-разработчик



Результат завершения установки представлен ниже.







Теперь мы проверим системный вызов open с помощью команды man, как показано ниже.

$ человек2открытым



Страница вывода руководства для системного вызова Open показана ниже. Вы можете увидеть дополнительную информацию по этому поводу. Нажмите кнопку q, чтобы выйти из него.

Приведенный выше синтаксис показывает первые три строки необходимых библиотек, которые необходимо добавить для системных вызовов. Для системного вызова open доступны три синтаксиса. Первый синтаксис показывает путь, то есть имя файла, который нужно открыть. Второй параметр, flags, показывает режим файла, например, чтение или запись. Второй синтаксис можно использовать, когда файл не существует. Режим параметров используется для отображения прав доступа к файлу.

Пришло время установить компилятор GCC для отладки кода C в дистрибутиве Ubuntu 20.04 Linux. Для этого выполните приведенную ниже инструкцию в оболочке.

$ sudo apt install gcc

Вам необходимо нажать Y, чтобы продолжить установку компилятора GCC, в противном случае нажмите кнопку n, чтобы закрыть установку. Итак, нажмите кнопку y и нажмите Enter, чтобы продолжить.

Результат завершения показан ниже.

Пример 01

Давайте посмотрим на очень простой пример системного вызова Open. Сначала откройте командную оболочку и создайте новый текстовый файл test.txt, используя простую сенсорную команду, как показано ниже:

$трогатьtest.txt

Добавьте в него данные вручную. Вы можете увидеть данные в файле, используя приведенную ниже команду cat.

$Котtest.txt

Теперь давайте создадим новый файл C с помощью команды nano в оболочке, как показано ниже.

$наноnew.c

Откроется приведенный ниже файл GNU nano. Вы должны ввести в него указанный ниже код языка C. Как видите, мы добавили необходимые пакеты библиотек для правильного выполнения кода C. После этого мы определили основную функцию для работы с системным вызовом Open. Мы объявили две целочисленные переменные. Переменная n используется для подсчета значений буфера, а fd - для дескриптора файла. Мы объявили буферный массив символьного типа как buf размером 50. Системный вызов open использовался для чтения содержимого файла test.txt и его возврата в файловый дескриптор. O_RDONLY использовался для чтения. В следующей строке показан системный вызов read для сбора 10 байтов из буфера и возврата их в целое число n. Кроме того, команда записи использовалась для записи содержимого или данных буфера в файловый дескриптор, который в нашем случае является экраном вывода прямо сейчас. Сохраните этот файл, используя Ctrl + S, и закройте его, используя команду Ctrl + X.

#включают
#включают
#включают
#включают

intглавный()
{
intп,fd;
charбуф[пятьдесят];
fdзнак равнооткрытым(тестовое задание.текст,O_RDONLY);
пзнак равночитать(fd,буф, 10);
записывать(1 ,буф, 10);

Давайте сначала скомпилируем код C для открытого системного вызова с помощью приведенной ниже команды gcc.

$gccnew.c

Теперь пора проверить вывод кода C для открытого системного вызова. Давайте воспользуемся приведенной ниже командой a.out в оболочке. Вывод отображает 10 байтов из содержимого файла test.txt.

$./к.из

Рассмотрим другой пример записи содержимого одного файла в другой с помощью системного вызова Open. Чтобы создать новый файл C с помощью команды nano, как показано ниже.

$ nano новый.c

Так что возьмите тот же код с небольшими изменениями. Мы определили другой файловый дескриптор в коде как fd1. Весь код такой же, за исключением одной дополнительной строки. Вторая последняя строка кода использовала системный вызов open для создания нового файла с именем target с использованием O_CREAT и режима только для записи как O_WRONLY. 0642 показывает привилегии, назначенные этому файлу. И файл был возвращен в новый файловый дескриптор. В следующей строке показана команда для записи байтов содержимого в буфер в соответствии с его файловым дескриптором. Сохраните файл и закройте его.

Выполните команду компиляции gcc, чтобы отладить файл языка C.

$ gcc новый.c

Чтобы отобразить вывод кода C, попробуйте команду a.out в оболочке, как показано ниже. Нет вывода, потому что вывод был перенаправлен на вновь созданный целевой файл.

$./к.из

Давайте проверим данные целевого файла с помощью команды cat. Вывод показывает, что в файле 20 байтов.

цель $ cat

Заключение

В приведенном выше руководстве мы объяснили вам, как использовать системный вызов open на языке C с помощью компилятора gcc. С помощью различных примеров, описанных в этом руководстве, вы сможете реализовать желаемую программу.