cでexeclp()に関する質問があります。Cプログラムでのexeclp()の使用
#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();
}
それは、ユーザー名@ホスト名のフォルダ$を印刷し、それはのexeclpでそれを起動する必要があり、その後(引数の「ls -al」 としてLinuxのコマンドを取る必要があります。
私は、次のプログラムの開発を持っています)、それは私が思うように動作しません。
私はこのコマンドに関するすべての記事を読んでいますが、私はまだそれを使用する方法を理解していないと思います。
私は誰かの助けに感謝します。
*「それは私が考えるべきではない」とは*正確に何を意味するのでしょうか? - execlp *はプロセスイメージを置き換えることに注意してください。あなたのプログラムには決して戻りません。私が理解する限り、http://stackoverflow.com/questions/16206961/c-program-exits-on-executing-execlp-function –
を見てください。もしexeclp()の文字列s1、s2(つまり、 execlp(s1、s2、NULL)、s1 = "ls"、s2 = "-al")なら、ls -al – Natalya
を実行する必要がありますか? – Natalya