gpt4 book ai didi

c - execv 等待输入输入而不是执行程序

转载 作者:行者123 更新时间:2023-11-30 19:40:32 26 4
gpt4 key购买 nike

我有一个名为“test”的程序,它执行另一个名为“hello”的程序。收到所需程序的名称后,我的程序似乎等待更多输入才能显示“hello”程序代码。示例代码片段

#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h> /* for fork */
#include <sys/wait.h> /* for wait */
int main() {

char *temp[] = {NULL,NULL,NULL,NULL};
char buf[BUFSIZ];
char s[256];

while(1) {

printf("type r at next input\n");
fgets(buf, sizeof(buf), stdin);
strtok(buf, "\n");

if((strcmp(buf,"r")) == 0) { //if r typed
printf("run what file : ");
scanf("%s ",s);

pid_t i = fork();
if (i == 0) //we are in child process
{
execv(s,temp);
_exit(1);
}
if (i != 0) { //parent
wait(NULL);
}
}
else
exit(0);
}
}

“hello”程序是...

#include<stdio.h>

main(int argc, char* argv[])
{
printf("\nHello World\n");

}

从 Linux 上的 shell 运行的示例是...* 表示我的输入,//是注释

issac@issac-ThinkPad-T440s ~$ ./a.out
type r at next input
*r*
run what file : *hello*
*r* //i cant proceed unless i type a character so i input *r*?

Hello World //after ?additional? input it finally displays the "hello" program code
type r at next input //loops back but program skips my input?
run what file ex ? hello :

我意识到这可能是一个简单的错误,但我无法弄清楚这有什么问题。我意识到跳过输入的最后一部分可能是由于输入缓冲区中有换行符,但更令人困惑的是为什么在执行“hello”之后我的程序等待更多输入来显示结果。

最佳答案

要回答你的第一个问题:在 scanf() 中删除尾随空格所以它看起来像这样:scanf("%s",s); .

回答你的第二个问题:你的问题是你混合了 scanf()fgets()scanf()不会消耗换行符并作为新输入传递给下一个(非第一个)fgets 。最简单的解决方案是使用 fgets在这两个地方:

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

int main() {

char *temp[] = {NULL,NULL,NULL,NULL};
char buf[BUFSIZ];
char s[256];

while(1) {
printf("type r at next input\n");
fgets(buf, sizeof(buf), stdin);
strtok(buf, "\n");

if((strcmp(buf,"r")) == 0) { //if r typed
printf("run what file : ");
fgets(s, sizeof(s), stdin);
strtok(s, "\n");
pid_t i = fork();
if (i == 0) //we are in child process
{
execv(s,temp);
_exit(1);
}
if (i != 0) { //parent
wait(NULL);
}
}
else
exit(0);
}
}

关于c - execv 等待输入输入而不是执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35245523/

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