📄 relay.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 + -