/*
@gcc version 3.2.2 20030222
@Linux version 2.4.20-8
*/
/*
@function:create
*/
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int c, oflag, mqid;
key_t keyMsg;
oflag = 0666|IPC_CREAT;
while( (c=getopt(argc, argv, "e")) != -1 )
{
switch(c)
{
case 'e':
oflag |= IPC_EXCL;
break;
}
}
if( optind != argc-1 )
{
cout<<"usage:msgcreate[-e] <pathname>"<<endl;
return 0;
}
keyMsg = ftok(argv[optind], 0);
if( keyMsg==-1 )
{
cout<<"err keyMsg:"<<endl;
return 0;
}
mqid = msgget(keyMsg, oflag);
if( mqid==-1 )
{
cout<<"err megget:"<<strerror(errno)<<endl;
return 0;
}
return 0;
}
/*
@function:send
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int mqid, iResult;
size_t len;
long type;
struct msgbuf *ptr;
if(argc != 4)
{
cout<<"usage:msgsnd <pathname> <#bytes> <type>"<<endl;
return 0;
}
len = atoi(argv[2]);
type = atoi(argv[3]);
mqid = msgget(ftok(argv[1],0), 060);
if( mqid==-1 )
{
cout<<"err msgget:"<<strerror(errno)<<endl;
return 0;
}
ptr = (struct msgbuf *)calloc(sizeof(long)+len, sizeof(char));
ptr->mtype=type;
iResult = msgsnd(mqid, ptr, len, 0);
if(iResult == -1)
{
cout<<"err msgsnd:"<<strerror(errno)<<endl;
free(ptr);
return 0;
}
free(ptr);
return 0;
}
/*
@function:recv
*/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <iostream>
using namespace std;
#define MAXMSG (8192+sizeof(long))
int main(int argc, char **argv)
{
int c, flag, mqid;
long type;
ssize_t n;
struct msgbuf *buff;
type = flag = 0;
while( (c=getopt(argc, argv, "nt:")) != -1 )
{
switch(c)
{
case 'n':
flag |= IPC_NOWAIT;
break;
case 't':
type = atoi(optarg);
break;
}
}
if( optind != argc-1 )
{
cout<<"argc err: usage:msgrcv [-n] [-t type] <pathname>"<<endl;
}
mqid = msgget( ftok(argv[optind], 0), 040 );//rwx:only read
buff = (struct msgbuf *)malloc(MAXMSG);
n = msgrcv( mqid, buff, MAXMSG, type, flag );
if(n==-1)
{
cout<<"msgget err:"<<strerror(errno)<<endl;
free(buff);
return 0;
}
cout<<"buff.mtype:"<<buff->mtype<<endl;
free(buff);
return 0;
}
/*
@function:rmid
*/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int mqid, iResult;
if(argc != 2)
{
cout<<"usage:msgrmid <pathname>"<<endl;
return 0;
}
mqid = msgget(ftok(argv[1], 0), 0);
if( mqid==-1 )
{
cout<<"err msgget:"<<strerror(errno)<<endl;
return 0;
}
iResult = msgctl(mqid, IPC_RMID, NULL);
if(iResult == -1)
{
cout<<"err msgctl:"<<strerror(errno)<<endl;
return 0;
}
return 0;
}
分享到:
相关推荐
本主题聚焦于使用HOOK SEND RECV函数来实现这一功能。HOOK,即钩子技术,是Windows API提供的一种机制,允许程序员监视系统或特定进程中的特定事件。SEND和RECV函数则是用于网络数据传输的核心API,它们分别处理发送...
Socket 编程中的 send 和 recv 函数详解 在 Socket 编程中,send 和 recv 函数是最基本的网络通信函数。它们用于在客户端和服务端之间传递数据。在 TCP/IP 协议中,send 函数用于将数据发送到服务端,而 recv 函数...
hook send recv wsasend wsarecv 封包工具源码 本工具支持命令行操作,采用远程线程注入目标进程,注入后hook发包函数,实现封包拦截。 主程序为MFC编写 动态链接库VC WIN32项目
标题:“Software caused connection abort: recv failed” 描述:“Software caused connection abort: recv failed” 知识点解析: ### 背景介绍 “Software caused connection abort: recv failed”这一错误...
对于学习和理解网络编程,熟悉并正确使用`send`和`recv`至关重要,它们是构建可靠网络应用程序的基础。通过深入研究这些文件,可以深化对这两个函数的理解,并有助于开发出高效、健壮的网络应用。
8. **错误处理**:在使用send和recv时,可能出现各种错误,如EINTR(被信号中断)、EAGAIN或EWOULDBLOCK(资源暂时不可用,需要重试)、ENETDOWN(网络不可用)等。开发人员需要适当地处理这些错误,确保程序的健壮...
在本项目"UDP_send_recv.zip"中,我们将探讨如何使用UDP协议进行数据的发送和接收。 首先,我们有两个主要的脚本:`UDP_recv.py`和`UDP_send.py`,分别代表UDP服务器端和客户端的实现。 1. **UDP服务器端(UDP_...
### send函数与recv函数详解 在计算机网络编程中,socket编程是实现进程间通信的一种重要方式,其中`send`函数和`recv`函数是进行数据发送与接收的关键接口。下面将详细阐述这两个函数的工作原理、参数意义以及使用...
本压缩包"cpp_sendrecv.zip"包含了使用C++实现的简易TCP客户端及其特性测试的代码。 首先,我们要理解TCP客户端的基本工作原理。TCP客户端通常负责发起连接请求,与服务器建立连接后,可以发送数据并接收服务器的...
udp 测试程序 udp 测试程序 udp 测试程序 udp 测试程序
【标题】:symbian_mms_sendrecv.zip_symbian MMs 【描述】:诺基亚手机在塞班系统中处理MMS(Multimedia Messaging Service,多媒体信息服务)的发送和接收过程是本主题的核心。这涉及到从创建、配置到实际传输...
send和recv函数是Winsock中最基础的发送和接收数据的函数,它们分别用于将数据发送到网络和从网络接收数据。 挂钩(Hook)是Windows系统中的一个机制,允许开发者在特定函数调用前或调用后插入自定义代码。在...
针对爱特梅尔的SAMA5D3X-EK评估版,RS485串口操作例子。
**原理**:基础数据接收法基于这样一个事实:当与服务端的socket连接断开时,`recv()`函数会返回空字符串(`''`)。因此,可以通过在一个循环中持续调用`recv()`函数,直到它返回空字符串为止,以此来确保所有数据都...
在 Windows 平台下,使用 winsock 函数时,recv 函数也会返回-1,但是如果没有设置超时,send 和 recv 函数都会堵住不动。 学习 socket_recv 函数需要了解其返回值的含义和使用场景,了解套接字的选项和多路复用 ...
不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。
封包助手是一个能拦截网络应用程序数据包的纯绿色软件(压缩包不足400KB,无插件无病毒,不需安装),包括Send,Recv,WSASend,WSARecv,SendTo,RecvFrom,WSASendTo,WSARecvFrom。 封包助手还可以拦截Connect和Accept...
然而,在处理网络连接时,有时会遇到错误提示"CURL ERROR: Recv failure: Connection reset by peer"。这个错误通常意味着在数据传输过程中,服务器或客户端意外地断开了连接,导致通信失败。以下是针对该问题的详细...
本文将详细讲解如何利用`iTerm2`配合`ZModem`协议的脚本`iterm2-send-zmodem.sh`和`iterm2-recv-zmodem.sh`来解决在远程服务器上进行文件传输时遇到的问题。 首先,让我们了解`ZModem`协议。`ZModem`是一种双向、...
总的来说,"com_recv_send.zip_com_recv"项目涉及的是本地串口通信的基础知识和实践,这对于嵌入式开发、物联网应用或者需要硬件交互的软件项目来说是非常重要的技能。通过掌握串口通信,开发者能够有效地实现设备间...