如何使用read系统调用读取数据输入

时间:2016-11-28 10:48:27

标签: c linux operating-system

我正在尝试使用read系统调用来读取输入数据。我的程序应该这样做:

  1. 读取以使用读取系统调用输入两个整数数据
  2. 总结这些值
  3. 使用写入系统调用打印输出结果
  4. 当第一个输入数据为-1
  5. 时结束程序

    这是我的代码但不能正常工作:

    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>    
    
    int main(int argc,char* argv[]) {
    
       char buff[2];
       char buff1[2];
       char buff_w[2];
    
       int sum = 0, i, n = 0, val = -1, val1 = -1, n1 = 0;
    
       for(i = 0; i < 2; i++) {
           buff[i] = 0;
           buff1[i] = 0;
           buff_w[i] = 0;
        }
    
       while((n = read(0, &buff, 1)) > 0) {
          val = atoi(buff);
          if(val == -1)
             break;
          if((n1 = read(0, &buff1, 1)) >0)
             val1 = atoi(buff1);
          if(val >= 0 && val1 >= 0) {
             sum = val + val1;
             sprintf(buff_w, "%d", sum);
             write(1, &buff_w, 1);
          }    
       }
    
       return 0;
    }
    

1 个答案:

答案 0 :(得分:0)

您的程序无法使用两个读入while循环。因为在两个读取调用中,您将从stdin读取。所以在第一次阅读时你会得到整数,但在第二次阅读时你会得到下一行(\ n)字符。

对于你的场景,你应该读取像scanf这样的缓冲区中的完整字符串,然后从字符串中获取整数,然后你想做什么。