Меню команд Linux (например, ls, ipconfig и т. Д.), Которое разветвляется и использует execl для запуска команд в качестве дочернего процесса

#c #menu #fork #pid #ls

#c #меню #fork #pid #ls

Вопрос:

Мне дали некоторый код, и мне нужно адаптировать его, чтобы отобразить меню команд Linux, и когда выбрана команда, программа должна разветвляться и использовать execl для запуска команд в качестве дочернего процесса и отображения его PID. Я новичок в C, так что до сих пор я боролся :/

 #include <unistd.h>
#include <stdio.h>
#include "sys/types.h"
#include <sys/wait.h>
int main(){

pid_t pid;
    int status = 0;
    int i;
    pid= fork() ;
        if(pid!=0) {
                wait(amp;status);
                printf ( " I am the parent my PID is %d, myPPID is %d, n ",getpid(),getppid());
                printf( "Mychild process has finished. n ");
        }else {
        printf ( " I am the child , my PID is %d , my PPID is %d n",getpid(),getppid());
        sleep(2);
        execl ( "/bin/ls",".",(char*)0);
        printf( "Can you read this ?n " ) ;
        }
return 0;
}
  

Комментарии:

1. И в чем ваш вопрос к нам?

2. Как бы мне начать это?

3. Вам нужно быть более конкретным. Вы хотите знать о каком-то неправильном поведении представленного кода? (Какой?) Вы хотите знать, как запрограммировать какую-то конкретную операцию? (Что?)

4. Извините, я хотел бы понять, как я могу заставить программу запускать команды Linux при выборе пользователем из меню.

5. Относительно: printf( "Can you read this ?n " ) ; exec*() Команды возвращаются ТОЛЬКО в случае exec*() сбоя функции. При таком сбое операторы должны быть: perror( "execl() сбой» ); выход ( EXIT_FAILURE ); `

Ответ №1:

перед вызовом

 fork() 
  

код должен отображать меню, возможно, через некоторые вызовы printf(),

затем введите выбор пользователя

затем используйте этот выбор, возможно, с помощью switch() оператора, чтобы поместить соответствующий текст в

 char *args[] variable 
  

затем используйте эту args[] переменную при вызове execl()