【问题标题】:Printing contents of file to stdout low-level I/O in C将文件内容打印到 C 中的标准输出低级 I/O
【发布时间】:2015-10-22 02:32:59
【问题描述】:

我将如何打印仅使用低级 I/O 函数附加到的文件的内容?

我得到的最接近的是打印我用来附加的文本 示例:

file1.txt = dog
file2.txt = cat

我想打印出 file2.txt,现在是“catdog”。我该怎么做?

如前所述,我只能打印“狗”。我也成功地附加了文件。我知道这可能是一个非常简单的解决方案,但我已经摸索了好几个小时了。

我的代码

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");
}

【问题讨论】:

  • 以目前的形式,很难说出问题是关于什么的。究竟是什么问题?
  • 我想你最好忘记术语低级 I/O。并发布一个简单的高级代码,并要求将其转换为低级。这样我们就可以了解您想要什么。
  • 对不起,我发布了我的代码。基本上我希望附加 file2 并将整个文件打印在控制台上
  • 显示open() 调用可能是相关的,因为有很多标志可以使用并且会影响结果。 O_TRUNCO_APPEND 是两个重要的标志,O_CREAT 也是如此。如果没有看到您是如何操纵它的,以及您是如何倒带或重新打开 file2.txt 以打印到标准输出的,很难猜出问题出在哪里。请阅读如何创建 MCVE (How to create a Minimal, Complete, and Verifiable Example?)。有了这些,很可能会直接解决您的问题。

标签: c stdout low-level low-level-io


【解决方案1】:

请注意,如果您要附加到 file2.txt,那么它将是“catdog”,而不是相反。如果您只能让 dog 写出,请实际进入文件以确保您实际上是在追加而不是简单地覆盖文件。

这里是一些关于低级文件 I/O 细节的阅读。阅读打开和关闭文件和原始 I/O 操作的前两个链接。在没有看到任何代码的情况下很难为您提供帮助,尽管您可能没有正确关闭文件,因此您的附加行没有被保存...

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 2013-11-11
    • 1970-01-01
    • 2015-08-31
    • 2017-09-20
    • 2011-01-08
    • 2023-03-20
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多