Я новичок в C. Моя конечная цель - создать модуль Apache, который возвращает crontab учетной записи пользователя Apache как JSON.C код для вывода системы linux whoami из модуля apache
Детские шаги сначала, хотя. Я успешно следовали учебники на двух следующих местах для вывода «Hello World», так и их вариации из модуля Apache (и я на самом деле собственные книги Ника Кью):
- http://www.cb1inc.com/2007/12/24/creating-a-hello-world-apache-module-with-kdevelop-on-ubuntu/
- http://www.theregister.co.uk/2006/10/03/apache_modules/
Я изменил примеры немного для вывода JSON следующим образом:
ap_rputs("{'hello': {'to': 'world', 'from': '?'}}", r);
Я хотел бы, чтобы подставить «?» выше с выходом команды «whoami» системы Linux (в конечном итоге я хочу запустить команду linux «crontab -lu username»). Как новичок C, хотя меня переполняет выбор относительно того, как это сделать, я пробовал несколько вещей и, похоже, не близок к тому, чтобы что-то делать правильно. Я, кажется, чтобы быть в состоянии поймать выход из Whoami или, по крайней мере, мой код компилируется и работает;)
FILE *sysp = popen("whoami","r");
Но я даже делать выше права? И что является хорошим следующим шагом? Я думал, что могу попытаться определить длину вывода сверху, а затем создать массив символов той же длины, перемотать дескриптор файла и захватить вывод. Но я, кажется, не получаю надлежащую длину, и, возможно, это неоптимальный подход? Когда я запускаю следующее (я оставил из пару строк я знаю, может быть необходимо, например, перемотать, fclose) выход я получаю -1:
fseek(sysp, 0L, SEEK_END);
long len = ftell(sysp);
char buf[2];
sprintf(buf, "%d", (int)len);
ap_rputs(buf, r);
Все указатели конкретно о том, как лучше подход выводя результат из системной команды «whoami».
Хороших моментов, хотя 'ltrace' думает что 'whoami' использует' geteuid() 'и' getpwuid() '. – ephemient
Да,' geteuid() 'используется для определения UID текущего пользователя, после чего следует поиск имени пользователя в passwd база данных, которая может быть файлом или удаленной базой данных. Поиск базы данных - это бит, который может блокироваться. –