在C语言中进行低级别I/O,将文件内容打印到标准输出。

3

如何使用低级I/O函数打印已追加的文件内容?

我最接近的方法是打印我用于追加的文本,例如:

file1.txt = dog
file2.txt = cat

我想要打印出现在的 "catdog" 文件 file2.txt。该怎么做?

如之前所述,我只能打印出 "dog"。我也成功地将文件附加到了末尾。我知道这可能是一个非常简单的解决方案,但我已经思考了几个小时。

我的代码:

while (1) {
        if ((bufchar = read(fdin1, buf, sizeof(buf))) > 0) {
                bp = buf;   // Pointer to next byte to write.
                while (bufchar > 0) {
                        if ((wrchar = write(fdin2, bp, bufchar)) < 0)
                                perror("Write failed");
                        bufchar -= wrchar;   // Update.
                        bp += wrchar;
                }
        }
        else if (bufchar == 0) {  // EOF reached.
                break;
        }
        else
                perror("Read failed");
}

以目前的形式,很难确定问题是关于什么的。到底是什么问题? - owacoder
我想你最好忘记“低级I/O”这个术语。发一份简单的高级代码,然后请求将其转换为低级代码。这样我们就可以了解你想要什么。 - milevyo
抱歉我发布了我的代码。基本上我想要将file2附加并且整个文件打印在控制台上。 - user3038871
可能需要展示open()调用,因为有很多可以使用并且会影响结果的标志。 O_TRUNCO_APPEND是两个重要的标志,O_CREAT也是如此。如果不知道您如何操作它以及如何将file2.txt倒回或重新打开以打印到标准输出,则很难猜测问题出在哪里。请阅读有关如何创建MCVE(如何创建最小完整可验证示例?)。有了这个,解决问题很可能是直截了当的。 - Jonathan Leffler
1个回答

0

提醒一下,如果你在追加到file2.txt文件中,那么它将变成“catdog”,而不是相反。如果你只能写入dog,那么请确保你实际上是在追加而不是简单地覆盖文件。

这里有一些关于低级文件I/O的具体阅读材料。阅读前两个链接以了解打开和关闭文件以及原始I/O操作。没有看到你的代码,很难帮助你,但有可能是因为你没有正确关闭文件,所以你追加的行没有被保存...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接