我必须修改这个脚本,它将“PATH”中的每个路径与脚本的每个参数结合起来,并为每个参数执行“ls -l”命令......这就是我想象的方式,但我有一些问题,不要'不知道到底是什么问题....我得到“分段错误(核心转储)”,如果没有,那么无论我给出多少个参数,输出都是相同的,所以我认为它只为其中一个执行命令但我不确定......谁能帮助我?...对不起,如果我的英语很粗糙或代码中的外语...
#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);
}
}
}
}