tôi muốn biết liệu tin nhắn xếp hàng có trống hay không. tôi đã sử dụng msg_ctl() như sau nó không hoạt động:Linux: Kiểm tra xem hàng đợi tin nhắn có trống không
struct msqid_ds buf;
int num_messages;
rc = msgctl(msqid, IPC_STAT, &buf);
và tôi đã sử dụng chức năng này ú:
int peek_message(int qid, long type)
{
int result, length;
if((result = msgrcv(qid, NULL, 0, type, IPC_NOWAIT)) == -1) {
if(errno==E2BIG)
return(1);
}
return(0);
}
trong cả hai trường hợp tôi nhận được kết quả tương tự trước và sau khi gửi một tin nhắn đến hàng đợi.
thư được gửi đến hàng đợi thành công, tôi đã thử nghiệm với việc đọc những gì tôi đã gửi.
"nó không hoạt động"? - nó làm gì? Bạn có nhận được một thông báo lỗi? Liệu nó có trả về một giá trị không mong muốn? Giá trị nào? – sehe
ý tôi là, tôi nhận được 0 tin nhắn –
Và trong trường hợp đầu tiên bạn đang kiểm tra buf.msg_qnum? Điều đó không rõ ràng vì bạn cũng có "int num_messages" không giải thích được. – Duck