共享内存的操作函数
#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