Системная функция не работает в C, когда команда содержит ".." - PullRequest
0 голосов
/ 09 мая 2020

Это мой код:

#include<stdlib.h>
int main()
{
    system("getent passwd {1000..60000}");

    return 1;
}

Я считаю, что "..", присутствующее в команде, вызывает проблему, потому что программа работает правильно для других команд.

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

system не запускает вашу обычную оболочку. Вместо этого всегда запускает /bin/sh. From system (3) :

ОПИСАНИЕ

Библиотечная функция system () использует fork (2) для создания дочернего процесса который выполняет команду оболочки, указанную в команде с использованием execl (3) следующим образом:

          execl("/bin/sh", "sh", "-c", command, (char *) NULL);

system() возвращается после завершения команды.

Обычно /bin/sh это оболочка, которая не понимает {1000..60000}. Для запуска bash или zsh нужно сделать что-то вроде

system("/bin/bash -c 'getent passwd {1000..60000}'");
0 голосов
/ 09 мая 2020

Не ответ на ваш вопрос о 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;
}
...