Новые книги

Эта серия, написанная в период с 1988 по 1995 года и состоящая из шестнадцати частей, является нетехническим введением в конструирование компиляторов. Серия является руководством по теории и практике разработки синтаксических анализаторов и компиляторов языков программирования. До того как вы закончите чтение этой книги, вы раскроете каждый аспект конструирования компиляторов, разработаете новый язык программирования и создадите работающий компилятор.
В современном мире практически все продается через Интернет, особенно информация. Миллионы людей уже сделали на ней состояние. А вы так хотите? Вы многое умеете и многое знаете, так начните продавать свои знания и зарабатывать на них деньги! Авторы этой книги раскрывают простые схемы создания собственного инфобизнеса. На каждую из основных его сфер представлена интеллект-карта, которая позволяет полностью охватить всю тему и разложить ее по полочкам. Эта книга должна стать настольной для любого человека, который хочет запустить свой инфобизнес и успешно его развивать. Вы узнаете, за что люди будут готовы отдать деньги и какие темы наиболее востребованны, как красиво «упаковать» ваши знания, как набрать базу подписчиков, как поддерживать интерес к инфопродукту и увеличивать его стоимость и, наконец, как можно зарабатывать на продаже своих знаний триста тысяч рублей в месяц. Интересно? Тогда читайте дальше и применяйте все инструменты на практике!

Примеры.

Пример 15

/* Команда для изменения скорости обмена в линии (baud).*/
/* Пример вызова в XENIX: baud /dev/tty1a 9600          */
/* /dev/tty1a - это коммуникационный последов. порт #1  */
/* Про управление модами терминала смотри man termio    */
#include <fcntl.h>
#include <termio.h>
struct termio old, new; int fd = 2;  /* stderr */
struct baudrate{ int speed; char *name;} br[] = {
  { B0,    "HANGUP" }, { B1200, "1200" }, { B9600, "9600"   },
  { B600,  "600"    }, { B2400, "2400" }, { EXTA,  "19200"  },
};
#define RATES (sizeof br/sizeof br[0])
main(ac, av) char *av[];
{       register i; char *newbaud;
	if( ac == 3 ){
	    if((fd = open(av[1], O_RDWR)) < 0 ){
		printf("Не могу открыть %s\n", av[1]); exit(1);
	    }   newbaud = av[2];
	} else  newbaud = av[1];
	if( ioctl(fd, TCGETA, &old) < 0 ){
	    printf("Попытка управлять не терминалом и не портом.\n");
	    exit(2);
	}
	if(newbaud == (char*)0) newbaud = "<не задано>";
	new=old;
	for(i=0; i < RATES; i++)
	    if((old.c_cflag & CBAUD) == br[i].speed) goto ok;
	printf("Неизвестная скорость\n"); exit(3);
ok:     printf("Было %s бод\n", br[i].name);
	for(i=0; i < RATES; i++)
	    if( !strcmp(newbaud, br[i].name)){
	      new.c_cflag &= ~CBAUD; /* побитное "или" всех масок B... */
	      new.c_cflag |= br[i].speed;
	      if( ioctl(fd, TCSETA, &new) < 0) perror("ioctl");
   /* Скорость обмена может не измениться, если терминал
    * не открыт ни одним процессом (драйвер не инициализирован).
    */        exit(0);
	    }
	printf("Неверная скорость %s\n", newbaud); exit(4);
}

© Copyright А. Богатырев, 1992-95
Си в UNIX

Назад | Содержание | Вперед