Я пишу программу, которая принимает пользовательский ввод из командной строки (команды linux/unix) и выполняет их в своей программе.
Мои шаги на данный момент:
- Запросить у пользователя количество введенных команд
- Fork() для создания дочернего процесса
- Вывод дочернего PID и родительского PID
- Разрешить пользователю вводить каждую команду, считывать каждый ввод в индекс argv
- Используйте execv для запуска каждой команды внутри argv
Основная проблема заключается в том, что при выполнении он просто выполняет «bin/ls/» в команде execv.
Вот пример вывода при запуске моей программы:
Введите количество команд: 2
PID дочернего элемента – 3487. PID родителя – 3485
Введите команду UNIX: ls
Введите команду UNIX : -al
СПИСОК ФАЙЛОВ, КАК ПРИ ВВОДЕ "LS" В ЛИНИИ CMD
Процесс завершен.
И вот мой исходный код:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
void main(int argc, char *argv[20])
{
int pid;
int num = 0;
printf("Enter number of commands: ");
scanf("%d", &argc);
pid = fork();
if(pid == 0)
{
printf("Child's PID is %d. Parent's PID is %d\n", (int)getpid(), (int)getppid());
for(num=0; num < argc; num++)
{
printf("Enter a UNIX command: ");
scanf("%s", argv[num]);
}
argv[num+1] = 0;
execv("bin/ls/", argv);
}
else
{
wait(pid);
printf("Process Complete.\n");
exit(0);
}
}
execv()
потерпит неудачу. - person Duck   schedule 22.09.2012/usr/bin/perl
в качестве команды для выполнения, я не буду счастлив, если вместо этого ваша оболочка выполнит/bin/ls
. Кажется, вы принимаете количество аргументов, а не количество команд. - person Jonathan Leffler   schedule 22.09.2012