「PATH」からのすべてのパスをスクリプトのすべての引数と組み合わせて、それぞれに対して「ls -l」コマンドを実行するこのスクリプトを作成する必要があります...これは私が想像した方法ですが、いくつか問題があり、ドン「何が問題なのか正確にはわかりません....「セグメンテーションフォールト(コアダンプ)」が表示されます。そうでない場合は、引数をいくつ指定しても出力は同じなので、そのうちの1つに対してのみコマンドを実行していると思いますでもよくわかりません...誰か助けてくれませんか?...私の英語が荒い場合やコード内の外国語が含まれている場合は申し訳ありません...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main (int argc,char* argv[])
{
char* s=(char*)malloc(sizeof(char)*strlen(getenv("PATH")));
s=getenv("PATH");
if (argc==0) {printf("Nem irt be egyetlen parametert sem!");}
else
{
char* seged=(char*)malloc(sizeof(char)*(strlen(strtok(s,":"))+1));
seged=strtok(NULL,":");
strcat(seged,"/");
int i=1;
for (i=1;i<=argc;i++);
{
char* seged2=(char*)malloc(sizeof(char)*(1000));
//char* seged2=(char*)malloc(sizeof(char)*(strlen(strtok(NULL,":"))+(strlen(argv[i]))+1)); if i use this line i get Segmentation Fault
strcat(seged2,seged);
strcat(seged2,argv[i]);
int pid=fork();
if (pid==0)
{
execl("/bin/ls","ls -l",seged2);
}
free(seged2);
}
while (strtok(NULL,":")!=NULL)
{
free(seged);
char* seged=(char*)malloc(sizeof(char)*(strlen(strtok(NULL,":"))+1));
seged=strtok(NULL,":");
strcat(seged,"/");
for (i=1;i<argc;i++);
{
char* seged2=(char*)malloc(sizeof(char)*(strlen(strtok(NULL,":"))+strlen(argv[i])+1));
strcat(seged2,seged);
strcat(seged2,argv[i]);
pid_t pid=fork();
if (pid==0)
{
execl("/bin/ls","ls -l",seged2);
}
free(seged2);
}
}
}
}