Это мой код:
#include<stdlib.h> int main() { system("getent passwd {1000..60000}"); return 1; }
Я считаю, что "..", присутствующее в команде, вызывает проблему, потому что программа работает правильно для других команд.
system не запускает вашу обычную оболочку. Вместо этого всегда запускает /bin/sh. From system (3) :
system
/bin/sh
ОПИСАНИЕ Библиотечная функция system () использует fork (2) для создания дочернего процесса который выполняет команду оболочки, указанную в команде с использованием execl (3) следующим образом: execl("/bin/sh", "sh", "-c", command, (char *) NULL); system() возвращается после завершения команды.
Библиотечная функция system () использует fork (2) для создания дочернего процесса который выполняет команду оболочки, указанную в команде с использованием execl (3) следующим образом:
fork
execl
execl("/bin/sh", "sh", "-c", command, (char *) NULL);
system() возвращается после завершения команды.
system()
Обычно /bin/sh это оболочка, которая не понимает {1000..60000}. Для запуска bash или zsh нужно сделать что-то вроде
{1000..60000}
system("/bin/bash -c 'getent passwd {1000..60000}'");
Не ответ на ваш вопрос о system (), но может быть вам полезен:
#include <pwd.h> #include <stdio.h> #include <sys/types.h> int main() { struct passwd *p; while (NULL != (p = getpwent())) { printf("id=%d name=%s\n", p->pw_uid, p->pw_name); } endpwent(); return 0; }