设为首页 加入收藏

TOP

Unix-domain-socket详解UDP(一)
2014-11-24 01:09:18 来源: 作者: 【 】 浏览:12
Tags:Unix-domain-socket 详解 UDP

共享内存的操作函数


#include


int shmget(key_t key, int size, int shmflg);


int shmctl(int shmid, int cmd, struct shmid_ds *buf);


void *shmat(int shmid, const void *shmaddr, int shmflg);


int shmdt(const void *shmaddr);



Unix域socket通信


#include


struct sockaddr_un


{


unit8_tsun_len;


sa_family_t sun_family;


charsun_path[104];


};


#include


socket操作的相关函数



使用select调用处理多路管道


#include


int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeva l *timeout);


void FD_ZERO(fd_set *fdset);/*initialize the mask pointed to by fdset */


void FD_SET(int fd, fd_set *fdset); /*set the bit, fd, in the mask pointed to by fdset*/


/*isthe bit, fd, set in the mask pointed to by fdset*/


void FD_ISSET(int fd, fd_set *fdset);


void FD_CLR(int fd, fd_set *fdset);


struct timeva l{


long tv_sec;


long tv_usec;


};


调用实例


#include


#include


#include


……


int fd1, fd2;


fd_set readset;


fd1= open(“file1”, O_RDONLY);


fd2= open(“file2”, O_RDONLY);


FD_ZERO(&readset);


FD_SET(fd1, &readset);


FD_SET(fd2, &readset);


Switch (select(5, &readset, NULL, NULL, NULL))


{


……


}



#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//#include
#include
#include


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include


#include


#include
#include
#include
#include
#include
#include
#include


#define JOSEPH_IPNC_SYS_NAME "av_server"
#define SOCK_UNIX_VIDEO_STREAM_FILE "/tmp/video1_sock"


#define SOCK_UNIX_VIDEO_STREAM_FILE_SEVER "/tmp/video1_server"
#define SOCK_UNIX_VIDEO_STREAM_FILE_CLIENT "/tmp/video1_client"


struct sockaddr_un server_address_udp;
struct sockaddr_un server_address_client;


extern struct sockaddr_un server_address_udp;



int video_stream_net_func_udp(void)
{
#if 0
int server_sockfd;

//unlink (SOCK_UNIX_VIDEO_STREAM_FILE_SEVER);//delete the file link for the function of bind


server_sockfd = socket (AF_UNIX, SOCK_DGRAM, 0);

server_address_udp.sun_family = AF_UNIX;
//server_address_udp.sin_port=htons(PORT);

strcpy (server_address_udp.sun_path, SOCK_UNIX_VIDEO_STREAM_FILE_SEVER);

joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp_socket_size = sizeof (server_address_udp);

//bind (server_sockfd, (struct sockaddr *)&server_address_udp, server_len);


joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp = 0;
joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp = server_sockfd;


printf("%s %d The udp mode send to jss succeed ,joseph_ipnc_s_socket_fd_udp is %d !\n",__FUNCTION__,__LINE__,joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp);
#else
int client_sockfd, ret;
//struct sockaddr_un pmmanager_addr, pmapi_addr;


client_sockfd = socket(AF_UNIX, SOCK_DGRAM, 0);
if(client_sockfd == -1)
{
perror("cannot create pmapi fd.");
}
unlink(SOCK_UNIX_VIDEO_STREAM_FILE_CLIENT); //configure pmapi's addr
memset(&server_address_client, 0, sizeof(server_address_client));
server_address_client.sun_family = AF_UNIX;
strcpy(server_address_client.sun_path, SOCK_UNIX_VIDEO_STREAM_FILE_CLIENT); //bind pmapi_fd to pmapi_addr
ret = bind(client_sockfd, (struct sockaddr*)&server_address_client, SUN_LEN(&server_address_client));
if(ret == -1)
{
perror("bind error.");
}


//configure pmmanager's addr
memset(&server_address_udp, 0, sizeof(server_addre

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇嵌入式 Linux C如何打印64bit的lo.. 下一篇嵌入式 hi3518c本地udp套接示例以..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: