⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cd.c

📁 早期freebsd实现
💻 C
字号:
#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <sys/uio.h>#include <stdio.h>main () {	int sock, msgsock, rval, rv ;	struct sockaddr_un rqsts;	char buf[1024] ;	sock = socket (AF_UNIX, SOCK_STREAM, 0) ;	if (sock < 0) {		perror("stream socket") ;		exit(1) ;	}	rqsts.sun_family = AF_UNIX ;	strcpy (rqsts.sun_path,"/dev/connect") ;	if (bind (sock, &rqsts, sizeof (rqsts))) {		perror ("bind /dev/connect") ;		exit (1) ;	}	listen (sock, 5) ;	for (;;) {		msgsock = accept(sock, 0, 0) ;		if (msgsock == -1) {			perror ("accept") ;			continue ;		}		loop:		rv = read (msgsock, buf, 1024) ;		if (rv < 0) perror("read") ;		else if (rv > 0) {		struct msghdr msg ; int fd ;	struct iovec iov[1];	char filename[32] ;			write (1, "{", 1) ; 			write (1, buf, rv) ; 			write (1, "}\n", 2) ; 			/*strcat(buf, "-connectd responds") ;			write(msgsock, buf, strlen(buf)) ;			if (strncmp(buf,"byebye", 6) == 0) break;			*/				strcpy(filename,"a filename") ;	msg.msg_name = "";		/* optional address */	msg.msg_namelen = 0 ;		/* size of address */	/*	iov->iov_base = filename;	iov->iov_len = sizeof (filename);	*/	iov->iov_base = 0;	iov->iov_len = 0 ;	msg.msg_iov = iov;	msg.msg_iovlen = 1;	msg.msg_accrights = (caddr_t) &fd ;		/* access rights sent/received */	msg.msg_accrightslen = 4;	fd = open (buf, 2) ;printf("fd %d \n", fd) ;	printf("$rv %d\n", sendmsg (msgsock, &msg, 0) );	goto exitx ;		}		if (rv) goto loop ;		close (msgsock) ;	}	exitx:	close (sock) ;	unlink ("/dev/connect") ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -