LINUX.ORG.RU
ФорумTalks

Анекдоты на C


0

0

/*
 *
 * This source code redistributed under GPL version 2 only
 *
 */

typedef struct {
    int fd_in;
    int fd_out;
    int cu_pid
) tlink;

typedef tlink * plink

/* Открываем последовательный порт для чтения/записи... */
plink open_serial(char * n) {
    plink ret;
    int fd_in[2];
    int fd_out[2];

    ret = (plink) malloc ( sizeof(tlink) );
    pipe(fd_in);
    pipe(fd_out);

    if ((ret->cu_pid=fork()) != 0) {
        ret->fd_in = fd_in[0];
        ret->fd_out = fd_out[1];
        return ret;
    } else {
        dup2(fd_out[0],0);
        dup2(fd_in[1],1);
        execl("/usr/bin/cu","/usr/bin/cu","-l",n);
    }
}

/* Закрываем порт */
void close_serial(plink p) {
    kill(p->cu_pid,SIGTERM);
    free(p);
}

/* Запись в порт &/
int write_serial(plink p, void * b, int len) {
    return write( p->fd_out, b, len );
}

/* Чтение из порта */
int read_serial(plink p, void * b, int len) {
    memset(buf,0,len);
    return read( p->fd_in, b, len );
}

int main() {
    char buf[256];
    plink f = open_serial("/dev/ttyS0");
    write_serial(f,"ATZ\r\n",5);
    read_serial(f,buf,256);
    printf("%s",buf);
    close_serial(f);
    return 0;
}

/* P.S.: чтоб вам так всю жизнь в винде через Hyperterminal работать! */
★★★★★

Да что-то это не анекдот даже, толи дело Alphex, от его анекдотов сразу такой ржач пробивает :)))

anonymous
()

Может быть Даша хотел намекнуть, что с ком портом в винде очень сложно

работать? К чему этот пассаж про хипертерминал?

Sun-ch
()

Вилимо это переработанная версия анекдота про неуловимого Джо.

ukez
()

На самом деле код наивный конечно, дети так пишут, но не смешной.

Sun-ch
()
Ответ на: комментарий от Sun-ch

> Подчеркните, где смешно, плиз?

Смешно тем, кто знаком с синопсисом соответствующих функций (то есть тем, кто умеет программировать).

no-dashi ★★★★★
() автор топика

зависимость вызываемого смеха от кол-ва необходимых интеллектуальных усилий нелинейная. Там горбик такой..

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

Да нет, вроде все нормально.

Форкает ку и наследует стдин и стдаут, хотя я в сях не сильно хорошо

разбираюсь.

Sun-ch
()
Ответ на: комментарий от dilmah

Все нашел

/* Запись в порт &/
int write_serial(plink p, void * b, int len) {
return write( p->fd_out, b, len );

В камменте звездочку надо поставить, вместо амперсанда,

только почему это смешно? Обычная ошибка.

Sun-ch
()
Ответ на: комментарий от Sun-ch

Прошу заметить, что в теме написано : "Анекдоты" - т.е. множетсвенное число. Видимо где-то в программе должен существовать как минимум еще один смешной участок кода

ukez
()
Ответ на: комментарий от ukez

Нет, явно что-то тут не то. Или мы все идиоты, или автор - ошибки вижу, смешного нет. Может объясните для жирафов?

anonymous
()

самые прикольные анекдоты наверно на собеседованиях пишут

dilmah ★★★★★
()

Я кажется понял.

ATZ - команда сброса модема, ку дозвонилась, а потом модем передернули

по-новой.

Sun-ch
()
Ответ на: комментарий от Sun-ch

никуда цу не дозванивается, оно молча открывает порт и сидит ждет ввода с кловеотуры

вместо запуска цу можно просто опен("/дев/ттуС0")

видимо это и есть анекдот

anonymous
()
Ответ на: комментарий от anonymous

cu - call Unix

Умеет дозванится до других систем.

/dev/ttyS0 - это com1 в линупсе?

Sun-ch
()
Ответ на: комментарий от anonymous

Первая шутка видимо символизирует как можно сделать плохо, "через кю" (явная аллюзия на киндза-дзу - вторая шутка) то, что можно сделать просто записав и прочитав данные из файла ком-порта (/dev/ttyS0).

ukez
()
Ответ на: комментарий от ukez

Ага, и получим линупс-онли кусок дерьма.

А ведь еще есть системы без ком-портов, ноутбук например

Задумка правильная, именно так и пишут профи, поскольку cu работает

в юниксе со времен System 7 и есть в любой системе.

Качество реализации - оценивать не берусь, я по сям не спец.

Sun-ch
()
Ответ на: комментарий от mikhail

Да фиг с ней.

Пускай Даша расскажет для тупых, в чем шутка юмора?

Sun-ch
()
Ответ на: комментарий от Sun-ch

Да ты че - курсы денег же ж стоят. Книжки надо умные читать - Герба Шилдта или там Волосяниса Левон Альфредовича ...

anonymous
()

Синтаксические ошибки - это мелочи, писалось "по памяти", а вот идея работы с COM-портом через "cu" - это и есть суть анекдота.

no-dashi ★★★★★
() автор топика
Ответ на: комментарий от no-dashi

Позвольте, нестыковочка получается. В теме треда четко написано "Анекдоты...", а вы говорите об "анекдоте" в единственном числе. Противоречие.

ukez
()

Запарили ! Анекдот это шутка которая доходит с первого раза даже до идиота (быдла), лучшие в мире анекдоты на C разрабатывает Alphex !

anonymous
()
Ответ на: комментарий от Sun-ch

Саныч, запарил тупить. есть в линуксе и всегда был цу. если в тележке нет железного ком-порта то и цу ей не нужен. линукц-специфика тут только в именовании кома и в пути к цу, ну дык в остальных униксах там вообще бардак караулович. а в чем тут прикол тебе уже сказали -- вместо того чтобы сделать fd=open("/dev/ttyS0") человек вызывает для этого внешнюю приблуду. об этом и говорит комментарий насчет гипертерма. да не смешно. зато про линух. блин. развели тут флейм

anonymous
()
Ответ на: комментарий от anonymous

> Запарили ! Анекдот это шутка которая доходит с первого раза даже до идиота (быдла), лучшие в мире анекдоты на C разрабатывает Alphex !

Ха-ха, ты пропустил анекдот от Keiko ;)

anonymous
()
Ответ на: комментарий от anonymous

На самом деле анекдот про линупсовых быдло-кодеров которые

пишут fd=open("/dev/ttyS0").

За такие вещи во времена онные расстреливали за свинарником, но похоже

кому то удалось выжить и расплодится.

Для особо тупых повторяю, ку в системе работает всегда, даже если

подключены десятки модемов и данный подход - признак профи.

Sun-ch
()
Ответ на: комментарий от Sun-ch

писец. просто полный. я абсолютно не понимаю о чем спор

1) линия указывается вручную, на соляре допустим этот код работать НЕ БУДЕТ; 2) если ты думаешь что цу открывает порт каким-то волшебным способом, отличным от опен -- погляди ему в исходники, порадуйся. да, там есть парочка ифдефайнов прикрывающих некоторые системозависимые иоцтли -- ты об этом говоришь? 3) насчет "ку в системе работает всегда" -- даже у укеза, который забыл доставить галку напротив пакета ююсипи? оба подходы кривые, один зависит от внешних программ, второй от системы

остроумец-профи блин. уже сказано что анекдот НЕ СМЕШНОЙ, ты все в бой рвешься на ровном месте

anonymous
()
Ответ на: комментарий от anonymous

Спешиал фор тупых.

man cu

Если cu в системе нет - то это срань, а не юникс.

То, над чем Даша хотел посмеятся, нормальная практика, а Даша - сам

лох.

А кроме тех кто пишет open("/dev/ttyS0") еще есть такие

которые пишут "чиста под bash" - этих воопще кастрировать надо.

Sun-ch
()

Вчера когда я прочитал этот пост, то решил, что я тупой такой, что мне даже не смешно :)) Ан, нет) Не один я не понял сути оказывается :))

php-coder ★★★★★
()
Ответ на: комментарий от Sun-ch

> То, над чем Даша хотел посмеятся, нормальная практика

Для тебя, тупой бездарный клоун, объясню - в любой системе есть файл, отвечающий за последовательный порт. Он может называться /dev/cuaa, /dev/ttyS0 или еще кучей всяких имен. Это означает, что с таким файлом можно сделать open(), и затем использовать его через write/read и так далее. А для настроек специфичных для последовательного порта, есть man termios.

Впрочем, таких бездарных тупых ботов типа тебя, не понимающих, что cu делает именно open() и затем делающих tcsetattr() и прочих из этой серии, учить чему либо бесполезно.

Иди тявкай про рули и педали для девочек, сяфка.

no-dashi ★★★★★
() автор топика
Ответ на: комментарий от no-dashi

Товарищ пидагог, я прошу культурно вести дисскуссию.

Ты наверное не знаешь, что юникс - многопользовательская

и мультипроцессная система.

Локи на порт кто будет ставить? Ась?

А ку - локи ставит, так что не перди в пудру Даша.

ШВИЗМ

Sun-ch
()

а-хха-ххха-ххаа а-хххи-хххи-хиии у-ххо-хо-хо-ххха ха ха ха-ха

anonymous
()
Ответ на: комментарий от anonymous

> даже у укеза, который забыл доставить галку напротив пакета ююсипи

поправка. не "забыл",а "даже не знает что такое, ибо эта пипка ему ни разу в жизни не нужна"

ukez
()
Ответ на: комментарий от no-dashi

> в любой системе есть файл, отвечающий за последовательный порт

Могу назвать систему в которой нету файла отвечающего за последовательный порт, но и форков там тоже нету :)

Очевидно, что подход с внешней программой более во многом более универсальный. Саныч во многом прав, хотя его аргументация слабовата.

ukez
()
Ответ на: комментарий от ukez

как говорят здесь : s/во многом более//

Задумался и забыл перечитать то, что написал

ukez
()
Ответ на: комментарий от ukez

> Могу назвать систему в которой нету файла отвечающего за последовательный порт

А как же насчет open("COM1:",...) ??? :-)

no-dashi ★★★★★
() автор топика
Ответ на: комментарий от no-dashi

>man flock и исчезни ибо там написано как положено ставить блокировки.

Даша, перестань уже позорится пожалуйста.

Почитай про UUCP-style lock file for serial device и подумай при

чем сдесь flock.

Надо же и такие люди еще кого то учат ковырятся в носу.

Sun-ch
()
Ответ на: комментарий от Sun-ch

> Почитай про UUCP-style lock file for serial device

Пример 1.
Первая консоль: запускаем cat </dev/ttyS0
Вторая консоль: запускаем cu -l /dev/ttyS0 и в cu говорим atz

Мысли недоумка твоего уровня развития предугадать нетрудно, ты ведь уже радостно собираешься отпостить ответ "а надо использовать кошерные программы, ламо!" Ладно, смеятся над убогими недоумками типа тебя у приличных людей не принято, а добрые люди (типа меня) спокойно добавят:

Пример 2.
Первая консоль: cu -l /dev/ttyS0
Вторая консоль: rm -f /var/lock/LCK* ; cu -l /dev/ttyS0

Пример 3:
Первая консоль: cu -l /dev/ttyS0
Вторая консоль: mv /var/lock /var/oldlock ; cu -l /dev/ttyS0

Пример 4:
Первая консоль: cu -l /dev/ttyS0
Вторая консоль: chroot /tmp/fakesys ; cu -l /dev/ttyS0

Вопросы:
1. какое приложение прочтет ответ OK от модема?
2. куда отправился любимый тобой UUCP-style lock?

Кстати, man'ы можешь не читать - отморозкам типа тебя поможет только принудительная эвтаназия с последующей переработкой в БРиЛ.

no-dashi ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.