Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
<b>#include <stdio.h></b>
<b>char *tmpnam(char *s);</b>
Функция
tmpnam
s
NULL
L_tmpnam
tmpnam
TMP_MAX
Если, временный файл предполагается использовать немедленно, вы можете одновременно назвать его и открыть с помощью функции
tmpfile
tmpnam
tmpfile
<b>#include <stdio.h></b>
<b>FILE* tmpfile(void);</b>
Функция tmpfile возвращает указатель потока, ссылающийся на уникальный временный файл. Файл открыт для чтения и записи (с помощью
fopen
w+
В случае возникновения ошибки
tmpfile
NULL
errno
Давайте посмотрим эти две функции в действии:
#include <stdio.h>
#include <stdlib.h>
int main() {
char tmpname[L_tmpnam];
char* filename;
FILE *tmpfp;
filename = tmpnam(tmpname);
printf("Temporary file name is: %sn", filename);
tmpfp = tmpfile();
if (tmpfp) printf("Opened a temporary file OKn");
else perror("tmpfile");
exit(0);
}
Когда вы откомпилируете и выполните программу tmpnam.с, то увидите уникальное имя файла, сгенерированное функцией
tmpnam
$ <b>./tmpnam</b>
Temporary file name is: /tmp/file2S64zc
Opened a temporary file OK
Как это работает
Программа вызывает функцию
tmpnam
tmpfile
tmpnam
В некоторых версиях UNIX предлагается другой способ генерации имен временных файлов — с помощью функций
mktemp
mkstemp
tmpnam
<b>#include <stdlib.h></b>
<b>char *mktemp(char *template);</b>
<b>int mkstemp(char *template);</b>
Функция mktemp создает уникальное имя файла на основе заданного шаблона
template
template
Х
mktemp
Х
NULL
Функция
mkstemp
tmpfile
mktemp
В ваших собственных программах следует всегда применять функции "создать и открыть"
tmpfile
mkstemp
tmpnam
mktemp
Информация о пользователе
Все программы в ОС Linux за исключением программы init, запускаются другими программами или пользователями. В главе 11 вы узнаете больше о взаимодействии выполняющихся программ или процессов. Пользователи чаще всего запускают программы из командной оболочки, реагирующей на их команды. Вы видели, что в программе можно определить собственное окружение, просматривая переменные окружения и читая системные часы. Программа может также выяснить данные о пользователе, применяющем ее.
Когда пользователь регистрируется в системе Linux, у него или у нее есть имя пользователя и пароль. После того как эти данные проверены, пользователю предоставляется командная оболочка. В системе у пользователя также есть уникальный идентификатор пользователя, называемый UID (user identifier). Каждая программа, выполняемая Linux, запускается от имени пользователя и имеет связанный с ней UID.
Вы можете настроить выполнение программ так, как будто они запускаются другим пользователем. Если у программы есть свой набор прав доступа для UID, она будет выполняться от имени владельца исполняемого файла. Когда выполнена команда su, программа действует так, как будто она запущена суперпользователем. Затем она проверяет право доступа пользователя, изменяет UID на идентификатор назначенной учетной записи и запускает регистрационную командную оболочку данной учетной записи. Этот прием позволяет программе выполняться от имени другого пользователя и часто используется системными администраторами для выполнения задач технического обслуживания системы.