社区
C语言
帖子详情
msgrcv返回7是怎么回事?
aozhi
2010-03-18 06:42:26
调用
msgrcv(id,&buf,sizeof(buf的类型)-sizeof(int),0,0);
返回了-1
errno=7
argument list too long.
会是什么原因呢?
谢谢
...全文
511
3
打赏
收藏
msgrcv返回7是怎么回事?
调用 msgrcv(id,&buf,sizeof(buf的类型)-sizeof(int),0,0); 返回了-1 errno=7 argument list too long. 会是什么原因呢? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
aozhi
2010-03-19
打赏
举报
回复
[Quote=引用 1 楼 mymtom 的回复:]
int
msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
消息字节数超过了第三个参数(msgsz),而且没有设置MSG_NOERROR标志
[E2BIG] A matching message was received, but its size was
greater than msgsz ……
[/Quote]
在以前的solaris上好像不出错,到Linux上就出错了,奇怪。
cy330206
2010-03-18
打赏
举报
回复
http://blog.sina.com.cn/s/blog_510f720a01008tzs.html
楼主看看这个链接,
mymtom
2010-03-18
打赏
举报
回复
int
msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
消息字节数超过了第三个参数(msgsz),而且没有设置MSG_NOERROR标志
[E2BIG] A matching message was received, but its size was
greater than msgsz and the MSG_NOERROR flag was not
set in msgflg.
javaweb+javaSE面试题.zip
88、什么是阻塞IO?什么是非阻塞IO? 阻塞情况(read, recv,
msgrcv
的行为): 1. 如果没有数据,会一直等待; 2. 有数据时候会读到用户指定的缓存区,但是如果数据量比较少,少于参数指定的大小,read也会立即
返回
,而不会一直等到数据足够。 阻塞读的原则:数据不超过指定长度的时候,有多少读多少,没有数据就会一直等待。 所以一般情况下,都需要采用循环读的方式,因为一次read不能保证读完需要的全部数据。 非阻塞情况(read, recv,
msgrcv
的行为) 1. 没有数据,就立即
返回
; 2. 有数据,也是采用有多少读多少的方式来处理。 所以,read完一次,要判断读到的数据长度或者错误码再决定是否再次读取。注意这里的EAGAIN错误码是需要继续读取,而
返回
0是对方已关闭连接。 写: 阻塞情况(write/send/msgsnd的行为) 与阻塞读有多少读多少不同的是,阻塞写会一直阻塞,直到所有数据都完成,再
返回
。 这是因为,读的时候不知道需要读多少,防止一直等不到足够的数据;而写的时候是知道要写多少数据的。不过也可能被中断,大多数情况是能够写完的。
总结:Linux中socket常见错误分析
并不是所有的系统调用都可以自动恢复。如msgsnd喝
msgrcv
就是典型的例子,msgsnd/
msgrcv
以block方式发送/接收消息时,会因为进程收到了信号而中断。此时msgsnd/
msgrcv
将
返回
-1,errno被设置为EINTR。且即使在插入信号时设置了SA_RESTART,也无效。
linux
msgrcv
阻塞,Linux系统调用--msgsnd/
msgrcv
函数详解
【msgsnd/
msgrcv
系统调用】功能描述:在消息队列上进行收发消息。为了发送消息,调用进程对消息队列必须有写权能。接收消息时必须有读权能。用法:#include #include #includeint msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);ssize_t
msgrcv
(int msqid, void *m...
msgrcv
()函数详解
msgrcv
()函数详解
函数msgsnd()及函数
msgrcv
()参数详解
最近看system V消息队列,在看到msgsnd()这个函数时,发现了一个错误。(注:我看的是UNIX网络编程卷二:进程间通信 第二版) msgsnd()函数:追加一条新消息到消息队列的系统调用语法: #include <sys.msg.h> int msgsnd(int msqid, const void *ptr, size_t lengt...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章