The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

аналог утилиты cat по отношению к терминалу (terminal io)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: terminal, io,  (найти похожие документы)
Date: Fri, 15 Mar 2002 18:10:26 +0300 From: Alexander Pevzner <pzz@pzz.msk.ru> Newsgroups: fido7.ru.unix.prog Subject: аналог утилиты cat по отношению к терминалу ZK> А можено настроить cu (использует часть конфигов uucp) и его stdout ZK> перенаправить в файл - тоже получится лог в файле. Все эти cu выведут из равновесия кого угодно :-( Вот, простенькая програмка (моего изготовления), которая ведет себя как cat по отношению к терминалу. MakeFile:
CC = gcc CPPFLAGS = -Wall -O2 -g LIBS = LDFLAGS = OBJS = \ catterm.o PROG = catterm ALL = $(PROG) PREFIX = /usr/local # Autodependencies ifneq (.depend,$(wildcard .depend)) ALL = dep_then_all endif # Standard rules all: $(ALL) dep_then_all: make dep make all clean: rm -f .depend rm -f *.o core $(TESTS) rm -f *.so rm $(PROG) install: $(PROG) cp $(PROG) $(PREFIX)/bin/$(PROG) strip $(PREFIX)/bin/$(PROG) atnBuffer: atnBuffer.o test-atnBuffer.o $(CC) $(CPPFLAGS) -o $@ $+ $(PROG): $(OBJS) $(CC) $(CPPFLAGS) -o $@ $+ $(LIBS) $(LDFLAGS) # Autodependencies dep: $(CC) $(CPPFLAGS) -M *.c >.depend ifeq (.depend,$(wildcard .depend)) include .depend endif catterm.c:
#include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <termios.h> static speed_t tty_speed = B9600; static char *tty_line = NULL; #define panic_perror(msg...) \ do{ \ int err = errno; \ printf( msg ); \ printf( ": %s\n", strerror( err ) ); \ exit( 1 ); \ }while(0) #define panic(msg...) \ do{ \ int err = errno; \ printf( msg ); \ printf( "\n" ); \ exit( 1 ); \ }while(0) static void usage( void ) { printf( "usage:\n" " catterm [options] line\n" "options:\n" " -s speed -- line speed (default is 9600)\n" ); exit( 1 ); } static speed_t speed2termio( unsigned long speed ) { switch( speed ) { case 2400: return B2400; case 4800: return B4800; case 9600: return B9600; case 19200: return B19200; case 38400: return B38400; case 57600: return B57600; case 115200: return B115200; default: return 0; } } static void parse_argv( int argc, char **argv ) { int opt; while( (opt = getopt( argc, argv, "s:" )) != EOF ) { switch( opt ) { case 's': { char *end; unsigned long speed = strtoul( optarg, &end, 0 ); if( *end || !(tty_speed = speed2termio( speed )) ) { printf( "%s: invalid speed -- %s\n", argv[0], optarg ); usage(); } } break; default: usage(); } } if( optind < argc ) tty_line = argv[ optind ]; else usage(); } static FILE *tty_open( void ) { int fd; struct termios mode; speed_t speed = speed2termio( tty_speed ); int tmp; FILE *fp; fd = open( tty_line, O_RDWR | O_NONBLOCK | O_NOCTTY ); if( fd == -1 ) panic_perror( "open()" ); memset( &mode, 0, sizeof( mode ) ); mode.c_cflag = CS8 | HUPCL | CLOCAL; mode.c_iflag = IGNBRK | IGNPAR; mode.c_oflag = 0; mode.c_lflag = 0; cfsetospeed( &mode, speed ); cfsetispeed( &mode, speed ); mode.c_cc[ VMIN ] = 1; mode.c_cc[ VTIME ] = 0; if( tcsetattr( fd, TCSANOW, &mode ) == -1 ) panic_perror( "tcsetattr()" ); tmp = fcntl( fd, F_GETFD ); tmp &= ~O_NONBLOCK; fcntl( fd, F_SETFL, tmp ); fp = fdopen( fd, "rw" ); if( !fp ) panic_perror( "fdopen()" ); return fp; } int main( int argc, char *argv[] ) { FILE *fp; int c; parse_argv( argc, argv ); fp = tty_open(); while( (c = getc( fp )) != EOF ) putchar( c ); return 0; }
-- Wishes, Alexander Pevzner (pzz@pzz.msk.ru)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру