gpt4 book ai didi

c - 执行不工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:51 24 4
gpt4 key购买 nike

用户必须键入命令,程序应执行它。我正在使用 fork() 和 execlp() 但不工作。我正在打印 comando 和 ruta 看看它们是否好用。我不知道如何让它与众不同以使其发挥作用。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include<string.h>

int main(){
char comando[10];
char ruta[40];
printf("Type a command: ");
fgets(comando,10,stdin);

pid_t pid;
pid = fork();

if (pid < 0){
perror("Error");
return -1;
}
else if (pid == 0){
strcpy (ruta,"/bin/");
strcat (ruta,comando);
printf("%s",ruta);
printf("%s",comando);
execlp(ruta, comando,NULL);
}
else{
wait(NULL); }

return 0;
}

最佳答案

execlp 因为fgets() 没有执行命令,在上面的fgets() 复制了换行comando 的末尾。请参阅 fgets()

的手册页

删除新行为

fgets(comando,sizeof(comando),stdin); 
comando[strlen(comando)-1] ='\0'; /* replacing '\n' with '\0' */

或者您可以按照@Jonathan Leffler 的建议使用下面的strcspn()

comando[strcspn(comando, "\n"))] = '\0';

完整的工作代码

int main(){
char comando[10];
char ruta[40];
printf("Type a command: ");
fgets(comando,sizeof(comando),stdin);
comando[strlen(comando)-1] ='\0';
pid_t pid;
pid = fork();
if (pid < 0){
perror("Error");
return -1;
}
else if (pid == 0){
strcpy (ruta,"/bin/");
strcat (ruta,comando);
execlp(ruta, comando,NULL);
}
else{
wait(NULL);
}
return 0;
}

关于c - 执行不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49469051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com