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

📄 relay2.c

📁 linux源码
💻 C
字号:
#include <stdio.h>#include <fcntl.h>#include <errno.h>#include <sys/types.h>#define BUFSIZE 32struct job_st {	int fd1, fd2;	int fd1save, fd2save;	int r1, w2, r2, w1;	char buf12[BUFSIZE], buf21[BUFSIZE];	int len12, pos12, len21, pos21;};intdo_relay(struct job_st *p){	int ret;	if (p->r1+p->w2+p->r2+p->w1) {		if (p->r1) {			p->len12=read(p->fd1, p->buf12, BUFSIZE);			p->pos12=0;			if (p->len12==-1) {				if (errno!=EAGAIN) {					p->r1=0; p->w2=0;				}			} else if (p->len12==0) {				p->r1=0; p->w2=0;			} else {				p->r1=0; p->w2=1;			}		}		if (p->w2) {			ret=write(p->fd2, p->buf12+p->pos12, p->len12);			if (ret==-1) {				if (errno!=EAGAIN) {					p->r1=0; p->w2=0;				}			} else {				p->pos12+=ret;				p->len12-=ret;				if (p->len12==0) {					p->r1=1; p->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;				}			}		}*/	}	return 0;}intrelay(struct job_st *p){	p->fd1save=fcntl(p->fd1, F_GETFL);	ret=fcntl(p->fd1, F_SETFL, p->fd1save|O_NONBLOCK);	if (ret==-1) {		return -1;	}	p->fd2save=fcntl(p->fd2, F_GETFL);	ret=fcntl(p->fd2, F_SETFL, p->fd2save|O_NONBLOCK);	if (ret==-1) {		fcntl(p->fd1, F_SETFL, p->fd1save);		return -1;	}	while (1) {		ret=do_relay(p);		if (ret==-1) {			break;		}	}	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 + -