Как отправить входные данные процессу в C?
Я пытаюсь запустить git push из C:
system("git push");
И когда он просит
username:
password:
Я хочу вернуть ему имя пользователя и токен github. Как бы я это сделал? Я пытался найти решение, но я не могу понять формулировку правильно, когда я решаю проблему с помощью Google. Обратите внимание, что у меня есть имя пользователя и токен char*
"S:
char *username = "whatever";
char *token = "whatever";
system("git push");
2 ответа
Невозможно отправить входные данные в процесс, если он был создан с использованием system(char *command);
(или, возможно, возможно, но я думаю, что это слишком сложно), вам нужно создать новый процесс с popen(const char *command, const char *type);
, ( всплывающая документация здесь). Это небольшой пример, который я написал:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char username[] = "something";
char password[] = "something";
FILE *pf; // file descriptor of the git process
pf = popen("git push", "w"); // create git process in write mode
if (!pf) {
printf("Process couldn't be created!");
return 1;
}
// this will send username and password (and the '\n' char too) to the git process
fputs(username, pf);
fputs(password, pf);
pclose(pf); // close git process
return 0;
}
execv can be used to accomplish this .
int execv(const char *file, char *const argv[]);
Пример: Следующий пример иллюстрирует использование execv для выполнения команды оболочки ls:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
main()
{
pid_t pid;
char *const parmList[] = {"/bin/ls", "-l", "/u/userid/dirname", NULL};
if ((pid = fork()) == -1)
perror("fork error");
else if (pid == 0) {
execv("/bin/ls", parmList);
printf("Return not expected. Must be an execv error.n");
}
}
вы можете изменить на основе вашего кода