zoukankan      html  css  js  c++  java
  • UNIX 域套接字——UNIX domain socket

    /*********************程序相关信息*********************
     * 程序编号:015
     * 程序编写起始日期:2013.11.30
     * 程序编写完成日期:2013.11.30
     * 程序修改日期:                                    修改备注:
     * 程序目的:学习UNIX域套接字
     * 所用主要函数:socket() bind() accept() listen()
     * 程序说明: 同一台机器不同进程间通信。
     * 程序完成地点: 
     * *********************程序相关信息*********************/
    
    
    #define UNIX_PATH_MAX    108
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    
    #include <stdio.h>
    
    #define BUFSIZE 32
    
    int main(void)
    {
    	int sd, newsd;
    	char buf[BUFSIZE];
    	struct sockaddr_un myend,*p;
    	int ret;
    
    	sd = socket(PF_LOCAL, SOCK_STREAM, 0);
    	if (sd == -1) {
    		perror("socket()");
    		goto socket_err;
    	}
    //  #define UNIX_PATH_MAX    108
    //
    //  struct sockaddr_un {
    //		sa_family_t    sun_family;               /* AF_UNIX */
    //		char           sun_path[UNIX_PATH_MAX];  /* pathname*/
    //	};
    //
    	myend.sun_family = AF_UNIX;
    	//int snprintf(char *str, size_t size, const char *format);
    	snprintf(myend.sun_path, UNIX_PATH_MAX, "rcv_sock");
    //	fprintf("rcv_sock","%s",myend.sun_path); //wrong
    
    	unlink(myend.sun_path);
    // Call the unlink function to remove the specified FILE
    	ret = bind(sd, (struct  sockaddr *)&myend, sizeof(myend));
    	if (ret == -1) {
    		perror("bind()");
    		goto bind_err;
    	}
    //调用 listen 使其能够自动接收到来的连接并且为连接队列指定一个长度限制
    	listen(sd, 20);
    
    	newsd = accept(sd, NULL, 0);
    	if (newsd == -1) {
    		perror("accept()");
    		goto accept_err;
    	}
    
    	while (1) {
    		ret = read(newsd, buf, BUFSIZE);
    		/* if error */
    		if (ret == 0) {
    			break;
    		}
    
    		write(1, buf, ret);
    		write(newsd, "xxxxx
    ", 6);
    	}
    
    	close(newsd);
    	close(sd);
    
    	return 0;
    
    
    
    	close(newsd);
    accept_err:
    bind_err:
    	close(sd);
    socket_err:
    	return 1;
    }

     
    /*********************程序相关信息*********************
     * 程序编号:015
     * 程序编写起始日期:2013.11.30
     * 程序编写完成日期:2013.11.30
     * 程序修改日期:                                    修改备注:
     * 程序目的:学习unix 
     * 所用主要函数:pipe(),read(),fork()
     * 程序说明:在本机上运行时,可以把程序中的“./test.c”修改成自己机器上的某个文件(要带路径)
     * 程序完成地点: 
     * *********************程序相关信息*********************/
    
    
    #define UNIX_PATH_MAX    108
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    
    #include <stdio.h>
    
    #define BUFSIZE 32
    
    int main(void)
    {
    	int sd;
    	char buf[BUFSIZE];
    	struct sockaddr_un hisend;
    	int ret;
    
    	sd = socket(PF_LOCAL, SOCK_STREAM, 0);
    	if (sd == -1) {
    		perror("socket()");
    		goto socket_err;
    	}
    
    	hisend.sun_family = AF_UNIX;
    	snprintf(hisend.sun_path, UNIX_PATH_MAX, "rcv_sock");
    
    	ret = connect(sd, (struct  sockaddr *)&hisend, sizeof(hisend));
    	if (ret == -1) {
    		perror("connect()");
    		goto connect_err;
    	}
    
    	while (1) {
    		ret = read(0, buf, BUFSIZE);
    		/* if error */
    		if (ret == 0) {
    			break;
    		}
    
    		write(sd, buf, ret);
    		ret = read(sd, buf, BUFSIZE);
    		write(1, buf, ret);
    	}
    
    	close(sd);
    
    	return 0;
    
    
    
    accept_err:
    connect_err:
    	close(sd);
    socket_err:
    	return 1;
    }
  • 相关阅读:
    hadoop优点和缺点
    HDFS的基本shell操作,hadoop fs操作命令
    HDFS的java操作方式
    HDFS的体系结构和操作
    windows主机无法访问服务器
    用公共key实现无密码ssh
    hadoop2的伪分布部署
    lsof/fuser卸载挂载文件
    编译Apache Hadoop2.2.0源代码
    三十分钟掌握STL
  • 原文地址:https://www.cnblogs.com/pangblog/p/3400229.html
Copyright © 2011-2022 走看看