X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=dart%2Feet.c;fp=dart%2Feet.c;h=af33b702116d216e62a2f2eda4728ede37d1c02a;hb=f91f83c19138f03472423b4a20f77c40590e197a;hp=0000000000000000000000000000000000000000;hpb=fc75445f2ac3d6e49391ba4af7c7dd2233aed3c6;p=svn42.git diff --git a/dart/eet.c b/dart/eet.c new file mode 100644 index 0000000..af33b70 --- /dev/null +++ b/dart/eet.c @@ -0,0 +1,83 @@ +/* + * eet + * + * + * Copyright (C) 2011 Christian Pointner + * + * This file is part of eet. + * + * eet is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * eet is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with eet. If not, see . + */ + +#include +#include + +#include + +int write_buf(char* buf, int len) +{ + int i; + for(i=0; i < len;) { + int w = write(1, &(buf[i]), len - i); + if(w < 0) + return w; + + i+=w; + } + return 0; +} + +int main(int argc, char* argv[]) +{ + if(argc < 2) { + fprintf(stderr, "Please specify fd number\n"); + return 1; + } + int fd = atoi(argv[1]); + if(fd < 3) { + fprintf(stderr, "the specified fd is not valid (must be higher than 2\n"); + return 2; + } + + char buf[1024]; + fd_set rfds; + + for(;;) { + FD_ZERO(&rfds); + FD_SET(0, &rfds); + FD_SET(fd, &rfds); + int ret = select(fd+1, &rfds, NULL, NULL, NULL); + + if (ret == -1) { + perror("select()"); + return 3; + } + else { + int i; + for(i = 0; i < 2; i++) { + if(FD_ISSET((i ? fd : 0), &rfds)) { + int r = read((i ? fd : 0), buf, sizeof(buf)); + if(r <=0 ) { + return r; + } + + ret = write_buf(buf, r); + if(ret) return ret; + } + } + } + } + + return 0; +}