`

基础:systemV 信号 create send recv rmid

阅读更多
/*
@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;	
}

2
0
分享到:
评论
2 楼 lin_style 2008-10-25  
simohayha 写道

还是posix的好用。

如果有全双工管道的平台直接全双工管道了。。


systemV 只能算是T&T的一个产物了。
1 楼 simohayha 2008-10-23  
还是posix的好用。

如果有全双工管道的平台直接全双工管道了。。

相关推荐

    HOOK SEND RECV函数拦截网络封包的程序.rar

    本主题聚焦于使用HOOK SEND RECV函数来实现这一功能。HOOK,即钩子技术,是Windows API提供的一种机制,允许程序员监视系统或特定进程中的特定事件。SEND和RECV函数则是用于网络数据传输的核心API,它们分别处理发送...

    socket send和recv详解

    Socket 编程中的 send 和 recv 函数详解 在 Socket 编程中,send 和 recv 函数是最基本的网络通信函数。它们用于在客户端和服务端之间传递数据。在 TCP/IP 协议中,send 函数用于将数据发送到服务端,而 recv 函数...

    hook send recv wsasend wsarecv 封包工具源码

    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” 知识点解析: ### 背景介绍 “Software caused connection abort: recv failed”这一错误...

    send-recv-init

    对于学习和理解网络编程,熟悉并正确使用`send`和`recv`至关重要,它们是构建可靠网络应用程序的基础。通过深入研究这些文件,可以深化对这两个函数的理解,并有助于开发出高效、健壮的网络应用。

    Socket-send-and-recv-.rar_c socket send recv_socket

    8. **错误处理**:在使用send和recv时,可能出现各种错误,如EINTR(被信号中断)、EAGAIN或EWOULDBLOCK(资源暂时不可用,需要重试)、ENETDOWN(网络不可用)等。开发人员需要适当地处理这些错误,确保程序的健壮...

    UDP_send_recv.zip_UDP Send Recv_UDP协议 send_UDP接收_independent14v_

    在本项目"UDP_send_recv.zip"中,我们将探讨如何使用UDP协议进行数据的发送和接收。 首先,我们有两个主要的脚本:`UDP_recv.py`和`UDP_send.py`,分别代表UDP服务器端和客户端的实现。 1. **UDP服务器端(UDP_...

    send函数 和recv函数

    ### send函数与recv函数详解 在计算机网络编程中,socket编程是实现进程间通信的一种重要方式,其中`send`函数和`recv`函数是进行数据发送与接收的关键接口。下面将详细阐述这两个函数的工作原理、参数意义以及使用...

    cpp_sendrecv.zip

    本压缩包"cpp_sendrecv.zip"包含了使用C++实现的简易TCP客户端及其特性测试的代码。 首先,我们要理解TCP客户端的基本工作原理。TCP客户端通常负责发起连接请求,与服务器建立连接后,可以发送数据并接收服务器的...

    udp 测试程序 send recv

    udp 测试程序 udp 测试程序 udp 测试程序 udp 测试程序

    symbian_mms_sendrecv.zip_symbian MMs

    【标题】:symbian_mms_sendrecv.zip_symbian MMs 【描述】:诺基亚手机在塞班系统中处理MMS(Multimedia Messaging Service,多媒体信息服务)的发送和接收过程是本主题的核心。这涉及到从创建、配置到实际传输...

    Winsock-Hook:挂钩winsock send&recv以读取进程的所有流量

    send和recv函数是Winsock中最基础的发送和接收数据的函数,它们分别用于将数据发送到网络和从网络接收数据。 挂钩(Hook)是Windows系统中的一个机制,允许开发者在特定函数调用前或调用后插入自定义代码。在...

    sama5d3x-ek: rs485_recv_send.c

    针对爱特梅尔的SAMA5D3X-EK评估版,RS485串口操作例子。

    python网络编程调用recv函数完整接收数据的三种方法

    **原理**:基础数据接收法基于这样一个事实:当与服务端的socket连接断开时,`recv()`函数会返回空字符串(`''`)。因此,可以通过在一个循环中持续调用`recv()`函数,直到它返回空字符串为止,以此来确保所有数据都...

    socket_recv函数使用心得.

    在 Windows 平台下,使用 winsock 函数时,recv 函数也会返回-1,但是如果没有设置超时,send 和 recv 函数都会堵住不动。 学习 socket_recv 函数需要了解其返回值的含义和使用场景,了解套接字的选项和多路复用 ...

    Socket send函数和recv函数详解

    不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。

    封包助手包括Send,Recv,WSASend,WSARecv,SendTo等

    封包助手是一个能拦截网络应用程序数据包的纯绿色软件(压缩包不足400KB,无插件无病毒,不需安装),包括Send,Recv,WSASend,WSARecv,SendTo,RecvFrom,WSASendTo,WSARecvFrom。 封包助手还可以拦截Connect和Accept...

    PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法

    然而,在处理网络连接时,有时会遇到错误提示"CURL ERROR: Recv failure: Connection reset by peer"。这个错误通常意味着在数据传输过程中,服务器或客户端意外地断开了连接,导致通信失败。以下是针对该问题的详细...

    iterm2-send-zmodem.sh and iterm2-recv-zmodem.sh

    本文将详细讲解如何利用`iTerm2`配合`ZModem`协议的脚本`iterm2-send-zmodem.sh`和`iterm2-recv-zmodem.sh`来解决在远程服务器上进行文件传输时遇到的问题。 首先,让我们了解`ZModem`协议。`ZModem`是一种双向、...

    com_recv_send.zip_com_recv

    总的来说,"com_recv_send.zip_com_recv"项目涉及的是本地串口通信的基础知识和实践,这对于嵌入式开发、物联网应用或者需要硬件交互的软件项目来说是非常重要的技能。通过掌握串口通信,开发者能够有效地实现设备间...

Global site tag (gtag.js) - Google Analytics