Я написал программу для использования execl, и я хочу иметь ту же функциональность, но вместо этого используйте execv.using execv вместо execl в linux
вот моя программа от execl:
#include <stdio.h>
#include <unistd.h>
int main (int argc, char *argv[])
{
int pid, status,waitPid, childPid;
pid = fork();/Duplicate/
if (pid == 0 && pid != -1)/Branch based on return value from fork()/
{
childPid = getpid();
printf ("(The Child)\nProcess ID: %d, Parent process ID: %d, Process Group ID: %d\n",childPid,getppid(),getgid());
execl("/bin/cat","cat","-b","-t","-v",argv[1],(char*)NULL);
}
else
{
printf ("(The Parent)\nProcess ID: %d, The Parent Process ID: %d, Process Group ID: %d\n",getpid(),getppid(),getgid());
waitPid = wait(childPid,&status,0);/Wait for PID 0 (child) to finish ./
}
return 1;
}
Затем я попытался изменить его, как, например, чтобы использовать execv вместо этого, но я не мог заставить его работать (так как в нем не было бы сказать, нет такого файла или каталог найдено)
Вы вызываете программу с ./ProgramName testfile.txt
Вот мои попытки в execv:
#include <stdio.h>
#include <unistd.h>
int main()
{
int pid, status,waitPid, childPid;
char *cmd_str = "cat/bin";
char *argv[] = {cmd_str, "cat","-b","-t","-v", NULL };
pid = fork();/Duplicate/
if (pid == 0 && pid != -1)/Branch based on return value from fork()/
{
childPid = getpid();
printf ("(The Child)\nProcess ID: %d, Parent process ID: %d, Process Group ID: %d\n",childPid,getppid(),getgid());
execv(cmd_str,argv);
}
else
{
printf ("(The Parent)\nProcess ID: %d, The Parent Process ID: %d, Process Group ID: %d\n",getpid(),getppid(),getgid());
waitPid = wait(childPid,&status,0);/Wait for PID 0 (child) to finish ./
}
return 1;
}
Любая помощь была бы огромной, застрявшей на этом довольно долгое время. Благодаря!
'кошки/bin' не является'/bin/cat' или '/ USR/бен/cat'. Откуда вы его взяли? –
Кроме того, если вы помещаете 'cmd_str' в верхнюю часть вашего списка argv, вы, вероятно, не должны _also_ иметь голый« кот »в этом списке. –
Ну, первый код был предоставлен мне, я верю, что это потому, что кошка находится внутри папки bin. Первый код отлично работает при его запуске. когда я пытаюсь использовать bin/cat на 2-й, он вообще не работает. – Lain