我正在编写一个创建txt文件input.txt
并将其用作exec()
输入的程序。我在将其输出重定向到另一个文件output.txt
时遇到问题,它们似乎与input.txt
的写作有关。
如果我使用fwrite(array, 4, 1, file)
,则重定向有效。
如果我使用fwrite(array, sizeof(array), 1, file)
或fprint
,则不会。
FILE *finput = fopen("input.txt", "w");
for (int i=0; i<dimension; i++)
{
char c; // I get it from another file, it isnt't important.
char arr[1];
arr[0] = c;
// WORKING LINE OF CODE
fwrite(arr, 4, 1, finput);
// NOT-WORKING LINE OF CODE
// fwrite(arr, sizeof(arr), 1, finput);
// ANOTHER NOT-WORKING LINE OF CODE
// fprintf(finput, "%c", c);
}
pid_t pid;
int status = -1;
pid = fork();
if (pid == -1)
{
printf("ERROR.");
}
else if ( pid == 0)
{
int fdOutput = creat("output.txt", 0777);
dup2(fdOutput, 1);
dup2(fdOutput, 2);
close(fdOutput);
// awkScript is an awk program string
int executionResult = execl("/usr/bin/gawk", "gawk", awkScript, "input.txt", (char*)NULL);
// ...
}
如果我编写代码行,则在程序结尾,output.txt
文件中会有一些文本。否则,它完全是空的。
最奇怪的是,input.txt
仍然可以正常工作,并且始终可以正确书写。所以我不明白为什么要把它与写作联系起来。如果我执行命令:
gawk $awkScript input.txt
以用于写入input.txt
的所有三种方式打印输出
答案 0 :(得分:3)
此代码存在多个问题(例如大小4…它来自哪里?您的数组长1个字节;这是未定义的行为),但是失败的根本原因是您无法关闭自己的代码文件。这意味着输出缓冲区永远不会被刷新,也不会写入任何输出。
fclose
是文件,或者写入后至少fflush
。