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

📄 relay.c

📁 linux源码
💻 C
字号:
#include <stdio.h>#include <fcntl.h>#include <errno.h>#include <sys/types.h>#define BUFSIZE 32intrelay(int fd1, int fd2){	int r1, w2, r2, w1;	int ret;	int fd1save, fd2save;	char buf12[BUFSIZE], buf21[BUFSIZE];	int len12, pos12, len21, pos21;	fd1save=fcntl(fd1, F_GETFL);	ret=fcntl(fd1, F_SETFL, fd1save|O_NONBLOCK);	if (ret==-1) {		return -1;	}	fd2save=fcntl(fd2, F_GETFL);	ret=fcntl(fd2, F_SETFL, fd2save|O_NONBLOCK);	if (ret==-1) {		fcntl(fd1, F_SETFL, fd1save);		return -1;	}	r1=1; w2=0; r2=1; w1=0;	while (r1+w2+r2+w1) {		if (r1) {			len12=read(fd1, buf12, BUFSIZE);			pos12=0;			if (len12==-1) {				if (errno!=EAGAIN) {					r1=0; w2=0;				}			} else if (len12==0) {				r1=0; w2=0;			} else {				r1=0; w2=1;			}		}		if (w2) {			ret=write(fd2, buf12+pos12, len12);			if (ret==-1) {				if (errno!=EAGAIN) {					r1=0; w2=0;				}			} else {				pos12+=ret;				len12-=ret;				if (len12==0) {					r1=1; w2=0;				}			}		}		if (r2) {			len21=read(fd2, buf21, BUFSIZE);			pos21=0;			if (len21==-1) {				if (errno!=EAGAIN) {					r2=0; w1=0;				}			} else if (len21==0) {				r2=0; w1=0;			} else {				r2=0; w1=1;			}		}		if (w1) {			ret=write(fd1, buf21+pos21, len21);			if (ret==-1) {				if (errno!=EAGAIN) {					r2=0; w1=0;				}			} else {				pos21+=ret;				len21-=ret;				if (len21==0) {					r2=1; w1=0;				}			}		}		usleep(1);	}	fcntl(fd1, F_SETFL, fd1save);	fcntl(fd2, F_SETFL, fd2save);	return 0;}intmain(){	int ret;	int fd1, fd2;	fd1=open("/dev/tty5", O_RDWR);	if (fd1==-1) {		perror("open()");		exit(1);	}	fd2=open("/dev/tty6", O_RDWR);	if (fd2==-1) {		perror("open()");		exit(1);	}	write(fd1, "fd1\n", 4);	write(fd2, "fd2\n", 4);	ret=relay(fd1, fd2);	close(fd1);	close(fd2);	exit(0);}

⌨️ 快捷键说明

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