J'ai une question concernant execlp() dans c.L'utilisation de execlp() dans un c-programme
Je le programm suivant:
#include <stdio.h>
#include <unistd.h>
#include <sys/unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <stdlib.h>
#include <limits.h>
#include <signal.h>
void INThandler(int);
int main(int argc, char* argv[]) {
struct passwd *pwd;
char *lgn;
char *cwd;
char buff[PATH_MAX + 1];
char s1[10], s2[10];
/*Um den Namen zu bekommen*/
lgn = getlogin();
pwd = getpwnam(lgn);
/*Um den Hostnamen zu bekommen*/
char hostname[128];
gethostname(hostname, sizeof hostname);
/*Um das Arbeitsverzeichnis zu bekommen*/
cwd = getcwd(buff, PATH_MAX + 1);
if((cwd!=NULL)&& hostname!=NULL && ((lgn=getlogin())!=NULL ||
(pwd!=NULL)))
{
signal(SIGINT, INThandler);
while(1)
{
printf("%[email protected]%s %s$", pwd->pw_name, hostname, cwd);
if(scanf("%s %s",s1, s2)<1)
return 1;
printf("Befehl: %s\nArgument: %s\n",s1,s2);
execlp(s1, s1, NULL);
printf("Zhopa");
return 1;
}
}
return 0;
}
void INThandler(int sig) {
char c;
signal(sig, SIG_IGN);
printf("Wollen Sie Program Verlassen? [y/n]");
c = getchar();
if(c == 'y' || c=='Y')
exit(0);
else
signal(SIGINT, INThandler);
getchar();
}
il doit imprimer le utilisateur nom @ dossier hostname $ et prendre une commande linux comme argument « ls -al » après qu'il devrait commencer avec execlp (), mais cela ne fonctionne pas comme je le pense.
J'ai lu tous les articles ici concernant cette commande, mais je suppose, je ne comprends toujours pas, comment l'utiliser.
J'apprécierais l'aide de quelqu'un.
* "ça ne marche pas comme je le pense" * signifie quoi exactement? - Notez que execlp * remplace * l'image de processus. Il ne retourne jamais à votre programme. Jetez un oeil à http://stackoverflow.com/questions/16206961/c-program-exits-on-executing-execlp-fonction –
autant que je comprends, si je donne à execlp() ces chaînes s1, s2 (que serait execlp (s1, s2, NULL), s1 = "ls", s2 = "-al"), alors il devrait lancer ls -al – Natalya
Est-ce correct? – Natalya