当前位置: 技术问答>linux和unix
奇怪的问题 奇怪的问题,向大家请教
来源: 互联网 发布时间:2016-03-29
本文导语: read 系统调用的问题: n=read(sockfd ,buff,sizeof(buff)); 用这个语句从tcp套接口读数据到buff中,假如客户端发送64字节数,这个语句能成功的读取64字节数据,n的值是64。 但是当我 在一个循环里如下使用时: ...
read 系统调用的问题:
n=read(sockfd ,buff,sizeof(buff)); 用这个语句从tcp套接口读数据到buff中,假如客户端发送64字节数,这个语句能成功的读取64字节数据,n的值是64。
但是当我 在一个循环里如下使用时:
while ( (n=read(sockfd ,buff,sizeof(buff))>0 ) {
// 执行体
}
n 的值确是1,不明白是为什么 ,执行的环境都是一样的,客户端发送,read 读取,在循环里时n 怎么是1呢,应该是客户端发送的字节数64啊 ? 请指教 ,谢谢哦
n=read(sockfd ,buff,sizeof(buff)); 用这个语句从tcp套接口读数据到buff中,假如客户端发送64字节数,这个语句能成功的读取64字节数据,n的值是64。
但是当我 在一个循环里如下使用时:
while ( (n=read(sockfd ,buff,sizeof(buff))>0 ) {
// 执行体
}
n 的值确是1,不明白是为什么 ,执行的环境都是一样的,客户端发送,read 读取,在循环里时n 怎么是1呢,应该是客户端发送的字节数64啊 ? 请指教 ,谢谢哦
|
while ( (n=read(sockfd ,buff,sizeof(buff))>0 )
能编译的过吗?是不是少了括号啊,=和>的优先级搞清楚了吗?
想通了记得把分给我
能编译的过吗?是不是少了括号啊,=和>的优先级搞清楚了吗?
想通了记得把分给我
|
少了一对括号,刚在机器上验证了,lz 的用法导致read的返回值先关系运算结果为真n的值故为1。 编程要仔细啊
|
重新贴代码上来,肯定是代码有问题: n的值取了逻辑运算的结果,而不是read()返回的字节数
|
while ( (n=read(sockfd ,buff,sizeof(buff))>0 ) {
// 执行体
}
你这样写N应该是1,因为少对括号()你这样先只执行read(sockfd ,buff,sizeof(buff))>0判断在赋值给n,所以n是1
// 执行体
}
你这样写N应该是1,因为少对括号()你这样先只执行read(sockfd ,buff,sizeof(buff))>0判断在赋值给n,所以n是1
|
有一种可能,就是客户端有发送了一个别的字节。可以用tcpdump来看一下客户端到底发送了什么数据。