一次读取一个文件,直到换行符使用read(2)和write(2)

时间:2018-04-09 00:25:47

标签: c++ arrays unix buffer

我正在尝试读取文本文件,直到找到第一个换行符并打印出第一行直到第一个换行符。

我正在使用read(2)和write(2)unix系统调用来完成此操作。不想为此使用getline()函数。我想浏览缓冲区数组中的每个字符并打印出元素,直到我到达第一行中的第一个换行符。还试图找出对第二行和文本文件中的最后一行做同样的事情。如果有意义的话,每一行都会显示在各自独立的程序中。

以下是我到目前为止的第一线计划....

#define BUFFSIZE 4
int main(int argc, char** argv)
{
   if(argc != 2)
   {
      cout << argv[0] << "need filename" << endl;
      exit(4);
   }

 int n = 0;
 char buf[BUFFSIZE];
 int fd = open(argv[1], O_RDONLY);

 while((n = read(fd, buf, BUFFSIZE))>0)
 {
    if[buf[0] != '\n')
     {
        cout << buf[0];
     }
    if[buf[1] != '\n')
     {
        cout << buf[1];
     }
    if[buf[2] != '\n')
     {
        cout << buf[2];
     }
    if[buf[3] != '\n')
     {
        cout << buf[3];
     }
 }
close(fd);
}

我将输入文件作为命令参数。我在输入文本文件中有几行,就像......

Purple is a cool color
Blue is the color of the sky
Green is the color of the grass

当我运行这个程序时,它会在命令窗口中将所有行打印到一个长行中,并且每个句子之间没有空格。

Output
Purple is a cool colorBlue is the color of the skyGreen is the color of the grass

我希望只有在找到第一个换行符时才能打印第一行,并且我很难弄清楚如何打印数组中的每个元素,直到读取换行符。

1 个答案:

答案 0 :(得分:0)

你的程序形成的方式你实际上告诉它打印所有内容,直到找到换行符,并且发现一个省略它。 为那些else引入if !=,在那里打印您想要的任何内容来代替换行符(例如2x换行符)。

列表也似乎格式不正确(条件后跟一个方括号),但我认为这是一个错别字。发布寻求帮助时编译的代码总是最好的。

同样如评论中所述,您一次只读4个条件,没有条件,您最终会陷入崩溃或垃圾输入。