Priya Mohata Ответов: 1

Как мне закодировать эту конкретную проблему так, чтобы она подходила для всех форматов(linux, mac и windows)


Напишите программу на языке Си, чтобы имитировать команду “adduser” в Linux. Эта команда добавит либо обычного пользователя, либо системного пользователя. Он должен обрабатывать 2 файла “passwd” и “shadow”. Оба этих файла будут находиться в некоторой папке, указанной переменной окружения PFILE. Программа должна принимать все аргументы в качестве аргументов командной строки (см. man-страницы для аргументов командной строки).
Когда мы запускаем команду „adduser„ в терминале Linux, она выполняет следующие основные действия:
1. он редактирует файлы /etc/passwd, /etc/shadow, /etc/group и /etc/gshadow для вновь созданных файлов.
Учетная запись пользователя.
2. создает и заполняет домашний каталог для нового пользователя.
3. устанавливает разрешения и права собственности на домашний каталог.
Варианты, которые должны быть реализованы, таковы::
adduser –u UID –g GID –c имя “пользовательские комментарии”
UID – идентификатор пользователя (целочисленное значение)
GID – идентификатор группы (целочисленное значение)
Пользовательские комментарии – строка, описывающая пользователя
name – Имя добавляемого пользователя
Эта команда изменяет файлы: passwd, shadow, group и gshadow. Вам нужно иметь
эти файлы находятся в каталоге, определенном через переменную окружения PFILE.
Файл /etc/passwd содержит по одной записи в строке для каждого пользователя (учетной записи пользователя) системы. Все
поля разделяются символом двоеточия (:). Всего семь полей следующим образом. Обычно,
запись файла /etc/passwd выглядит следующим образом:
формат /etc/passwd
Из приведенного выше изображения:
1. Имя пользователя: используется при входе пользователя в систему. Он должен быть от 1 до 32 символов в
длина.
2. пароль: символ x указывает, что зашифрованный пароль хранится в файле /etc/shadow.
3. Идентификатор пользователя (uid): каждый пользователь должен быть назначен идентификатор пользователя (uid). UID 0 (ноль) зарезервирован для
root и UIDs 1-99 зарезервированы для других предопределенных учетных записей. Далее жидкость 100-999 являются
Зарезервировано системой для административных и системных учетных записей/групп.
4. Идентификатор группы (gid): ID первичной группы (хранится в файле /etc/группа )
5. информация об идентификаторе пользователя: поле комментария. Он позволяет добавлять дополнительную информацию о пользователях
например, полное имя пользователя, номер телефона и т. д.
6. Домашний каталог: абсолютный путь к каталогу, в котором будет находиться пользователь при входе в систему. Если
этот каталог не существует, тогда каталог пользователей становится /
7. Command/shell: абсолютный путь к команде или оболочке (/bin/bash). Как правило, это
ракушка. Пожалуйста, обратите внимание, что это не обязательно должна быть оболочка.
Студенты могут жестко закодировать последние два поля следующим образом:
Домашний каталог - /user/home
Командная оболочка - /bin/bash
Поле пароля не должно быть заполнено ничем.
Они должны убедиться, что имя и UID уникальны для всех пользователей.
Пример:
Предположим, что мы выполняем программу как:
adduser –u 100 –g 200 –c “M S Anand” anandms
Такая строка будет добавлена (добавлена) в файл passwd:

Что я уже пробовал:

Я провел фундаментальное исследование аргументов командной строки

Richard MacCutchan

Мы будем рады помочь с проблемами в коде, который вы пишете. Но это ваше задание, так что вы должны выполнять реальную работу.

1 Ответов

Рейтинг:
2

RickZeeland

Для Windows вы можете использовать NetUserAdd функция, как описано здесь: Функция NetUserAdd (lmaccess.h) - приложения Win32 | Microsoft Docs[^]


phil.o

Поскольку это ваше задание, вы должны приложить к нему минимум усилий.
Вы должны начать с составления схемы необходимых шагов для удовлетворения требований. После этого переведите эти шаги в программу на языке Си.
Вы научитесь копировать/вставлять только в том случае, если мы выполним ваше задание за вас. На данный момент ваш вопрос скорее похож на вопрос типа "Пожалуйста, сделайте мою домашнюю работу". С другой стороны, если вы приложите какие-то минимальные усилия в своей работе и придумаете конкретный вопрос о каком-то написанном вами коде, мы будем рады вам помочь.