title: Reading from file using read() function
body: <p>I have to write a program that reads numbers in separate lines each. Is it possible to read only one line of the file and then read an <code>int</code> from the buffer, and so on until the end of file? It is really hard to find good examples of using read and write.  My example is kind of working but I'd like to read until it detects <code>'\n'</code> char and then convert buffer into int. </p>
  
  <pre><code>#include &lt;fcntl.h&gt; 
  #include &lt;stdio.h&gt; 
  #include &lt;string.h&gt;
  #include &lt;unistd.h&gt; 
  #include &lt;iostream&gt;
  
  int fd[2];
  
  void readFile(int fd) {
      unsigned char buffer[10];
      int bytes_read;
      int k=0;
      do {
          bytes_read = read(fd, buffer, 10); 
          k++;
              for(int i=0; i&lt;10; i++) {
              printf("%c", buffer[i]);
          }
      }
      while (bytes_read != 0); 
  }
  
  int tab[50];
  
  int main(int argc, char *argv[]) {
      if(argv[1] == NULL || argv[2] == NULL)   {
              printf("Function requires two arguments!\nGood bye...\n");
              return -1;
      }
      else {
          if (access(argv[1], F_OK) == 0) {
              fd[0] = open(argv[1], O_RDONLY);
          }
          else { 
              fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
              const int size = 50;
                  for(int i=0; i&lt;size; i++) {
                      char buf[10];   
                      sprintf(buf, "%d\n", i+1);
                      write(fd[0], buf, strlen(buf));
                  }
                  close(fd[0]);
              fd[0] = open(argv[1], O_RDONLY);
              if (access(argv[2], F_OK) == 0) 
                  fd[1] = open(argv[2], O_WRONLY);
              else 
                  fd[1] = open(argv[2], O_WRONLY|O_CREAT, 0700);
          }
      }
  
      if (access(argv[2], F_OK) == 0) 
          fd[1] = open(argv[2], O_WRONLY); 
      else 
          fd[1] = open(argv[2], O_WRONLY|O_CREAT, 0700);
  
  
      readFile(fd[0]);
      close(fd[0]);
      close(fd[1]);
  }
  </code></pre>
  
  <p>Revised code:</p>
  
  <pre><code>void readFile(int fd) {
      char buffer[10];
      int bytes_read;
      int k = 0;
      do {
          char t = 0;
          bytes_read = read(fd, &amp;t, 1); 
          buffer[k++] = t;    
          printf("%c", t);
          if(t == '\n' &amp;&amp; t == '\0') {
              printf("%d", atoi(buffer));
              for(int i=0; i&lt;10; i++) 
                  buffer[i]='\0';
              k = 0;
          }
      }
      while (bytes_read != 0); 
  }
  </code></pre>