+ -
当前位置:首页 → 问答吧 → read 赋值问题

read 赋值问题

时间:2011-11-29

来源:互联网

read 赋值问题
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main()
{
char buffer[4];
int a;

a = read(0, buffer, 4);
if (a = -1)

write(2, "abc\n", 3);

exit (0);
}


如果输入4位以上的话 他是会返回-1吗?

如果返回-1的话

他是不是因该返回我输入的字符串前3位啊??

为啥输入超过4位以上。。。这个例子报错啊。。。

新手 请教

作者: xht19842   发布时间: 2011-11-29

read()在读取过程中发生错误返回-1,设置相应的错误码,读取位置无法预期。

作者: nuaazdh   发布时间: 2011-11-29

这个程序写的有问题,首先是if(a = -1)
这样的话a永远是-1,而不是read返回的是-1。
应该是if (a == -1),一个等号是赋值,两个等号才是比较,楼主粗心了。

如果是4位或4位以上的话,它返回的是4,4位以下是几就返回几,出错返回-1。
如果是返回-1的话,那么就执行write(2, "abc\n", 3)这条语句,即在屏幕输出abc。还有一个\n所以应该是write(2, "abc\n", 4);

输入超过4位以上因为read只读4个字符,多出来的部分还在输入缓冲区,当程序结束会更新缓冲区,多余部分会打印在shell命令行上,这就是你说出错的原因。
你可以输入1234ls
然后就会显示你当前目录下的文件夹了。

作者: modicum_ck   发布时间: 2011-11-29

不好意思上面说错了
如果是4位或4位以上的话,它返回的是4,4位以下是几就返回几,出错返回-1。

改为

应该是4位以上的话,返回4, 4位以下返回-1。

作者: modicum_ck   发布时间: 2011-11-29

int ret = read(0, buf, 4);read函数的返回值:0:说明读到了文件的结尾,大于0:说明是实际读到的字节数,这个数会小于等于read函数中的第三个参数;小于0,(即-1):说明读取错误。

作者: cfjtaishan   发布时间: 2011-11-29