2013-03-19 273 views
-3

我无法从标准输入不断读取,直到按下CTRL + D。我必须使用unistd.h中的read()。我试图模拟猫的功能。有没有办法让我的缓冲区(我打印%s)看起来整洁没有不必要的空间从read(STDIN_FILENO, buf, 256)从标准输入读取,直到EOF

+3

没有看到你很难知道有什么建议的代码。 – suspectus 2013-03-19 22:20:40

+0

我不确定你的问题到底是什么,因为你没有发布代码,没有错误信息,也没有输出(预期的或实际的),但是这是一个黑暗中的镜头:读取函数不会null终止你,所以你应该这样做:'int rd = read(STDIN_FILENO,buf,255); buf [rd] = 0x0;',假设buf被声明为'char buf [256]' – FrankieTheKneeMan 2013-03-19 22:39:53

回答

2

我想模拟猫的功能。

这里是一个开始:

ssize_t nread, nwrite; 

while ((nread = read(STDIN_FILENO, buf, sizeof buf)) > 0) { 
    nwrite = write(STDOUT_FILENO, buf, nread); 
    /* Error handling and partial writes left as exercise. */ 
} 
+0

谢谢我已经有了这段代码,问题是sizeof(buf)..并且发现我的代码中有一个小错误我阅读后使用prinf作为buf ...... – Alex 2013-03-19 22:25:01

+1

@Alex sizeof'有什么问题? – cnicutar 2013-03-19 22:25:49

+0

对不起,这是迟到,我没有注意到,我有一个printf()之前我的代码读/写stdin/out,并导致一些混乱; D ..反正会发布一些代码后,我完成.. – Alex 2013-03-19 22:39:48