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位以上。。。这个例子报错啊。。。
新手 请教
#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
然后就会显示你当前目录下的文件夹了。
这样的话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。
如果是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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28