我遇到以下问题。比方说,我有两个程序,一个是“input.c”,第二个是“output.c”。输出很简单,看起来像这样(我只会粘贴最重要的段落)。
outputbin.c
//
char buffer[512];
strncpy(buffer, argv[1], sizeof(buffer));
printf("Your output is: %s\n", buffer);
//
这是我输入的主要段落:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
pid_t pid;
char *charchar = "\x41";
int status;
char *outputbin;
int i, j, iterations;
if(argc < 2)
{
fprintf(stderr, "Usage: %s <iterations> <outputbin>\n", argv[0]);
exit(0);
}
iterations = atoi(argv[1]);
outputbin = argv[2];
pid = fork();
if(pid != 0)
{
waitpid(-1, &status, 0);
}
if(pid == 0)
{
for(i=0; i < iterations; ++i)
{
for(j = 0; j <= i; ++j)
{
printf("%s", charchar);
//execl(outputbin, outputbin, charchar, NULL);
}
printf("\n");
}
}
return 0;
}
当我使用gcc编译这个程序并执行此操作时(不使用argv [2]): ./输入10 我明白了:
A
AA
AAA
AAAA
AAAAA
AAAAAA
AAAAAAA
AAAAAAAA
AAAAAAAAA
AAAAAAAAAA
没关系,但只有在我删除这段代码之后 - “ printf(”%s“,输入); ”并取消注释“ execl ”,所以:
for(j = 0; j <= i; ++j)
{
execl(output, output, input, NULL);
}
然后运行: ./ a.out 10 ./outputbin
我只得到这个 - 你的输出是:A
只有第一个字符,而这就是全部。如何让逐行执行整个“半金字塔”的字符串?无论我尝试什么,一切都以相同的结果结束。
答案 0 :(得分:0)
假设它成功执行,execl
不返回 - 它用另一个程序替换在该过程中运行的程序。所以在致电时:
for(j = 0; j <= i; ++j)
{
execl(output, output, input, NULL);
}
循环只会迭代一次 - 在调用execl
后,outputbin
将开始执行。如果你想保持循环逻辑,你应该将它移动到outputbin.c
,以便它在那里执行。