Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件内容打印到C中的标准低级I/O_C_Stdout_Low Level_Low Level Io - Fatal编程技术网

将文件内容打印到C中的标准低级I/O

将文件内容打印到C中的标准低级I/O,c,stdout,low-level,low-level-io,C,Stdout,Low Level,Low Level Io,我将如何只使用低级I/O函数打印附加到的文件的内容 我得到的最接近的结果是打印用于附加的文本 例如: 我想把file2.txt打印出来,它现在是“catdog”。我该怎么做 如前所述,我只能让“狗”打印出来。我也成功地添加了文件。我知道这可能是一个非常简单的解决方案,但我已经挠头好几个小时了 我的代码 while (1) { if ((bufchar = read(fdin1, buf, sizeof(buf))) > 0) { bp = b

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

我得到的最接近的结果是打印用于附加的文本 例如:

我想把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");
}
while(1){
如果((bufchar=read(fdin1,buf,sizeof(buf)))>0){
bp=buf;//指向要写入的下一个字节的指针。
while(bufchar>0){
如果((wrchar=write(fdin2,bp,bufchar))<0)
perror(“写入失败”);
bufchar-=wrchar;//更新。
bp+=wrchar;
}
}
如果达到(bufchar==0){//EOF,则为else。
打破
}
其他的
perror(“读取失败”);
}

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


下面是一些有关低级文件I/O的详细信息。请阅读打开和关闭文件以及基本I/O操作的前两个链接。如果看不到您的任何代码,就很难为您提供帮助,尽管您可能没有正确地关闭文件,因此您的附加行没有保存…

以其当前形式,很难判断问题是关于什么的。到底是什么问题?我想你最好忘记低级别i/O这个术语,发布一个简单的高级别代码,并要求将其转换为低级别。这样我们就可以知道你想要什么。对不起,我发了我的代码。基本上,我希望添加file2,并在控制台上打印整个文件。它可能与显示
open()
调用相关,因为有很多标志可以使用,并且可能会影响结果
O_TRUNC
O_APPEND
是两个重要标志,正如
O_create
一样。如果看不到您是如何操作的,以及您是如何倒带或重新打开
file2.txt
以打印到标准输出,就很难猜测问题出在哪里。请仔细阅读如何创建MCVE()。有了这一点,很可能就可以直接解决您的问题了。
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");
}