将文件内容打印到C中的标准低级I/O
我将如何只使用低级I/O函数打印附加到的文件的内容 我得到的最接近的结果是打印用于附加的文本 例如: 我想把file2.txt打印出来,它现在是“catdog”。我该怎么做 如前所述,我只能让“狗”打印出来。我也成功地添加了文件。我知道这可能是一个非常简单的解决方案,但我已经挠头好几个小时了 我的代码将文件内容打印到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
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");
}