Re: oftopic: (2) select() O_NONBLOCK: new URL

2001-06-07 Пенетрантность Daniel Ginsburg
On Mon, Jun 04, 2001 at 10:18:21AM -0400, Nick Orlov wrote:
 Есть отличная книжка, написанная РУССКИМ автором которая является весьма
 хорошим введением в программирование под *nix
 
 Андрей Робачевский, Операционная система Unix.
 
 Покупал на  в www.24x7.ru
 
 Сейчас у меня является настольной наряду со Страуструпом.
 

Нет, патриотизм я уважаю и ценю, но ...

Отличной я бы ее не назвал. Как введение она вполне подойдет, наряду,
например, с Теренсом Чаном, если не всему написаному верить. Но заваливать
стол этими книгами я бы не стал.

Когда доберусь до экземпляра, смогу запостить списочек промахов и
неточностей, если не поленюсь, и кого-нибудь это заинтересует.

-- 
dg



Re: oftopic: (2) select() O_NONBLOCK

2001-06-07 Пенетрантность Nick Orlov



Не, ну понятно, 
после нескольких лет ковыряния в Unix'ах книжки совсем ненужны, вполне 
хватает мановА как старт - она самое оно, а главное, она не грешит 
неточностями перевода,потому как его просто не было :))Ну и конечно 
это не та книга по которой нужно учить C/C++.А системные вызовы там освещены 
очень даже неплохо.Regards, Nick.- 
Original Message -From: "Daniel Ginsburg" [EMAIL PROTECTED]To: "Debian Russian" debian-russian@lists.debian.orgSent: Monday, June 04, 2001 10:33 AMSubject: Re: oftopic: (2) 
select() O_NONBLOCK: new URL


Re: oftopic: (2) select() O_NONBLOCK: new URL

2001-06-07 Пенетрантность Konstantin Sorokin
On Mon, Jun 04, 2001 at 10:18:21AM -0400, Nick Orlov wrote:
 Есть отличная книжка, написанная РУССКИМ автором которая является весьма
 хорошим введением в программирование под *nix
 
 Андрей Робачевский, Операционная система Unix.
 
 Покупал на  в www.24x7.ru
 
 Сейчас у меня является настольной наряду со Страуструпом.
 
 Regards,
 Nick.
 

У меня сложилось стойкое ощущение, что книжка Робачевского не
очень хороший пересказ Stevens'а. Сам я Stevens'а не читал, но
примеры в книжке Робачевского явно списаны оттуда (может с 
небольшими модификациями).

-- 
WBR, Konstantin V. Sorokin
GnuPG key fingerprint = 37A1 D039 0F07 774A BE34  428B 1E11 18BA 735B 7797
:wq


pgpka5SUMJO3i.pgp
Description: PGP signature


Re: oftopic: (2) select() O_NONBLOCK

2001-06-07 Пенетрантность Daniel Ginsburg
On Mon, Jun 04, 2001 at 10:57:52AM -0400, Nick Orlov wrote:
 Не, ну понятно, после нескольких лет ковыряния в Unix'ах книжки совсем не
 нужны, вполне хватает манов
 

Неверно. Замечательных книжек количество необозримое. Вот недавно 
прочитал Jim Mauro and Richard McDougall Solaris Internals. Core kernel
architecture, очень много нового узнал. Если попадется на глаза, то не
пожалейте времени.

Я сильно сомневаюсь, что когда-нибудь у человека возникает такой момент,
что книжки совсем не нужны, вполне хватает манов. Если такое наступило,
то пора во гроб. :)

-- 
dg



Re: oftopic: (2) select() O_NONBLOCK: new URL

2001-06-07 Пенетрантность Nick Orlov
Есть отличная книжка, написанная РУССКИМ автором которая является весьма
хорошим введением в программирование под *nix

Андрей Робачевский, Операционная система Unix.

Покупал на  в www.24x7.ru

Сейчас у меня является настольной наряду со Страуструпом.

Regards,
Nick.




Re: oftopic: (2) select() O_NONBLOCK

2001-06-07 Пенетрантность Nick Orlov
Извиняюсь, я немного неправильно выразился.
Всегда нужно читать книги по методам программирования,
(Я вот сейчас например перечитываю по 2му разу Exceptional C++, автора к
сожалению смогу назвать только после обеда - книга дома)
но c некоторого момента книги с описаниями системных вызовов и архитектуры
Unix становятся не нужны - всегда лазишь за справочной информацией в маны
(+headres + sources если есть) и обычно этого хватает.

Regards,
Nick.

- Original Message -
From: Daniel Ginsburg [EMAIL PROTECTED]
To: Debian Russian debian-russian@lists.debian.org
Sent: Monday, June 04, 2001 11:40 AM
Subject: Re: oftopic: (2) select() O_NONBLOCK


 On Mon, Jun 04, 2001 at 10:57:52AM -0400, Nick Orlov wrote:
  Не, ну понятно, после нескольких лет ковыряния в Unix'ах книжки совсем
не
  нужны, вполне хватает манов
 

 Неверно. Замечательных книжек количество необозримое. Вот недавно
 прочитал Jim Mauro and Richard McDougall Solaris Internals. Core kernel
 architecture, очень много нового узнал. Если попадется на глаза, то не
 пожалейте времени.

 Я сильно сомневаюсь, что когда-нибудь у человека возникает такой момент,
 что книжки совсем не нужны, вполне хватает манов. Если такое наступило,
 то пора во гроб. :)

 --
 dg


 --
 To UNSUBSCRIBE, email to [EMAIL PROTECTED]
 with a subject of unsubscribe. Trouble? Contact
[EMAIL PROTECTED]





Re: oftopic: (2) select() O_NONBLOCK

2001-06-03 Пенетрантность Victor B. Wagner
On Sat, 2 Jun 2001, Konstantin Sorokin wrote:

 On Sat, Jun 02, 2001 at 04:40:53PM +0400, Daniel Ginsburg wrote:
  Stevens. APUE. Полная библиографическая ссылка в разных FAQ. В FAQ из
  comp.unix.programmer она точно есть.

 А можно как-нибудь Stevens'а в России купить? Или только из-за
 границы...

В БиблиоГлобусе сам лично видел. На английском естественно.
А еще есть Фольком-букс.



Re: oftopic: (2) select() O_NONBLOCK

2001-06-02 Пенетрантность Konstantin Sorokin
On Sat, Jun 02, 2001 at 06:35:42PM +0700, Pavel Orehov wrote:
 Поступаю просто (http://oniltz.da.ru/~opa/test.c)
  ^
Что-то я не могу достучаться... и не пингуется.

-- 
WBR, Konstantin V. Sorokin
GnuPG key fingerprint = 37A1 D039 0F07 774A BE34  428B 1E11 18BA 735B 7797
:wq


pgphoA2TKdi3l.pgp
Description: PGP signature


Re: oftopic: (2) select() O_NONBLOCK

2001-06-02 Пенетрантность Alexey Mahotkin
 PO == Pavel Orehov [EMAIL PROTECTED] writes:

PO FIFO (устройства) ASCIIz строку.  Поступаю просто
PO (http://oniltz.da.ru/~opa/test.c) $mkfifo file ..
PO fd=open(file,O_RDONLY); FD_SET(fd,set); if(select(,set,0,0,0)0)
PO if(FD_ISSET(fd,set)) read(fd,buf+ofs,1); if(buf[ofs]=='\n')printf(we
PO got a line); ...

PO ладно... так все делают, но не охото на чтение _КАЖДОГО_БАЙТА_
PO (напоминаю: строка ASCIIz) ходить до селекта (кто видел основной цикл
PO ucd-snmpd согласится)

Читай целый буфер, килобайта четыре.  read вернет, сколько на самом деле
прочитано... 

PO ладно пишу fd=open(file,O_RDONLY|O_NONBLOCK); ...  for(;;){
PO n=read(fd,buf+ofs,1); if(n=0)return; if(buf[ofs]=='\n')printf(we got
PO a line); ofs++; }

PO и тут случается чудо: после получения первого байта у select начинается
PO недержание: непрерывно срывается с моим fd, но read, разумеется, честно
PO возвращает 0.

А что вы хотели от O_NONBLOCK? :)  select() не блокируется ровно поэтому.
Решение см. выше. 

PO Вопрос: как бороться с этой тварью, или 1. как узнать кол-во
PO данных/места в буфере для чтения/записи 

Просто попробовать прочитать сколько-нибудь.  Оно само скажет, сколько
прочиталось.  

PO 3. что
PO почитать на эту тему и окрестности кроме текстов ядра если сильно не
PO хочется за каждым байтом ходить к селекту и еще сильнее не хочится
PO переходить на бинарный формат с фиксированным размером блока.  подпорки
PO типа семафоров/msgq/сигналов еще больше не нравятся (это близко к
PO вопросу о M$vsUNIX)

http://alexm.here.ru/manpages-ru/?  Там вроде бы все основные вопросы на
эту тему затронуты. 

PO 4. вообще какая книжка по программированию Unix хорошая?

Вопрос же совершенно тривиальный, там никакой книжки не нужно, нужно
просто прочитать всю группу манов и воспринять ее сущностно. 

PO хоть какая отмазка: все это программируется под потатой и для работы на
PO потате

Welcome to fido7.ru.unix? 

--alexm



Re: oftopic: (2) select() O_NONBLOCK

2001-06-02 Пенетрантность Daniel Ginsburg
On Sat, Jun 02, 2001 at 06:35:42PM +0700, Pavel Orehov wrote:
 Прошу прощения за дикий офтопик, но сильно надо, а в книжках и мане вопрос
 совершенно не освещен и других _дружественных_ мест я не знаю...

comp.unix.programmer место весьма достойное.

 
 вобщем писал модуль к ucd-snmnpd и обнаружил эфект:
 Надо прочитать из FIFO (устройства) ASCIIz строку.
 Поступаю просто (http://oniltz.da.ru/~opa/test.c)

Достучаться не могу, поэтому буду говорить про написанное.

 $mkfifo file
 ..
 fd=open(file,O_RDONLY);
 FD_SET(fd,set);
 if(select(,set,0,0,0)0)
   if(FD_ISSET(fd,set))
 read(fd,buf+ofs,1);

А кто результат read проверять будет? Да и чтение по байтику --
удовольствие дорогое. Очень.

  result = read (fd, buf+ofs, spaceleft);
  if (result == 0) { /* данные кончились, больше не будет */ }
  if (result  0) { /* случилось страшное */ }
  ofs += result; spaceleft -= result;

И неблокирующее чтение в этом случае уже и не нужно.

 if(buf[ofs]=='\n')printf(we got a line);
 ...
 
 ладно... так все делают, но не охото на чтение _КАЖДОГО_БАЙТА_
 (напоминаю: строка ASCIIz) ходить до селекта (кто видел основной цикл
 ucd-snmpd согласится)
 
 тут возникает вопрос: а сколько байтов есть в буфере? fstat.st_size==0
 

Лишний это вопрос. Сколько есть - все твои. :)

 ладно пишу 
 fd=open(file,O_RDONLY|O_NONBLOCK);
 ...
  for(;;){
n=read(fd,buf+ofs,1);
if(n=0)return;

Это бесчеловечный поступок. Нельзя неблокирующим чтением в цикле без
остановки ...

Опять же, кто на EWOULDBLOCK проверять будет? Не все то ошибка, что -1 из
read.

if(buf[ofs]=='\n')printf(we got a line);
ofs++;
  } 
 
 и тут случается чудо: после получения первого байта у select начинается
 недержание: непрерывно срывается с моим fd, но read, разумеется,
 честно возвращает 0.

Если select сказал, что из fd читать можно, а read вернул 0, то это
однозначно кончились данные и в этом fd уже ничего интересного не будет.

 
 Вопрос: как бороться с этой тварью, или
 1. как узнать кол-во данных/места в буфере для чтения/записи

Не надо.

 2. как ее успокоить

Аккуратно проверять, что вернул read.

 3. что почитать на эту тему и окрестности кроме текстов ядра

Stevens. APUE. Полная библиографическая ссылка в разных FAQ. В FAQ из
comp.unix.programmer она точно есть.

 если сильно не хочется за каждым байтом ходить к селекту и еще сильнее не
 хочится переходить на бинарный формат с фиксированным размером блока.
 подпорки типа семафоров/msgq/сигналов еще больше не нравятся (это близко
 к вопросу о M$vsUNIX)
 

Ужас какой. Не надо придумывать никаких сигналов. А уж тем более семафоров
и очередей, ибо на них тот же select не скажешь.

 4. вообще какая книжка по программированию Unix хорошая?
 

См. пункт 3.

 хоть какая отмазка: все это программируется под потатой и для работы на
 потате
 
 

:))

-- 
dg



Re: oftopic: (2) select() O_NONBLOCK

2001-06-02 Пенетрантность Daniel Ginsburg
On Sat, Jun 02, 2001 at 04:13:41PM +0400, Alexey Mahotkin wrote:
  PO == Pavel Orehov [EMAIL PROTECTED] writes:
 PO и тут случается чудо: после получения первого байта у select начинается
 PO недержание: непрерывно срывается с моим fd, но read, разумеется, честно
 PO возвращает 0.
 
 А что вы хотели от O_NONBLOCK? :)  select() не блокируется ровно поэтому.
 Решение см. выше. 
 

Да ну?
select'у все равно, O_NONBLOCK ли дескриптор.

 PO 3. что
 PO почитать на эту тему и окрестности кроме текстов ядра
 
 http://alexm.here.ru/manpages-ru/?  Там вроде бы все основные вопросы на
 эту тему затронуты. 
 

Manpages от линукса довольно слабенькие. А их переводы, на мой вкус, вообще
ЗЛО. Эта не та литература, которую переводить надо.

 PO хоть какая отмазка: все это программируется под потатой и для работы на
 PO потате
 
 Welcome to fido7.ru.unix? 
 

Лучше comp.unix.programmer :)

-- 
dg



Re: oftopic: (2) select() O_NONBLOCK: new URL

2001-06-02 Пенетрантность Pavel Orehov
  Поступаю просто (http://oniltz.da.ru/~opa/test.c)
 Достучаться не могу, поэтому буду говорить про написанное.
http://www.nsib.ru/~opa/test.c
http://land7.nsu.ru/~opa/test.c

и общий встречный вопрос: откуда (из какой строки мана) следует, что read
вернет столько сколько уже есть и чем это его поведение отличается от
случая O_NONBLOCK или я совсем тормоз? Вроде в блокирующем режиме он
обязан стоять, пока не прочитает _ВСЕ_ запрошенное?



Re: oftopic: (2) select() O_NONBLOCK

2001-06-02 Пенетрантность Konstantin Sorokin
On Sat, Jun 02, 2001 at 04:40:53PM +0400, Daniel Ginsburg wrote:
 Stevens. APUE. Полная библиографическая ссылка в разных FAQ. В FAQ из
 comp.unix.programmer она точно есть.

А можно как-нибудь Stevens'а в России купить? Или только из-за
границы...

-- 
WBR, Konstantin V. Sorokin
GnuPG key fingerprint = 37A1 D039 0F07 774A BE34  428B 1E11 18BA 735B 7797
:wq


pgpERPplXHJfR.pgp
Description: PGP signature


Re: oftopic: (2) select() O_NONBLOCK: new URL

2001-06-02 Пенетрантность Daniel Ginsburg
On Sat, Jun 02, 2001 at 07:58:23PM +0700, Pavel Orehov wrote:
   Поступаю просто (http://oniltz.da.ru/~opa/test.c)
  Достучаться не могу, поэтому буду говорить про написанное.
 http://www.nsib.ru/~opa/test.c
 http://land7.nsu.ru/~opa/test.c


Посмотрю через полчасика.

 и общий встречный вопрос: откуда (из какой строки мана) следует, что read
 вернет столько сколько уже есть и чем это его поведение отличается от
 случая O_NONBLOCK или я совсем тормоз? Вроде в блокирующем режиме он
 обязан стоять, пока не прочитает _ВСЕ_ запрошенное?
 
 

Нет. В блокирующем режиме read будет стоять, пока не прочтет хоть что-нибудь.

[17:05] [EMAIL PROTECTED]:~$ man 2 read

...

RETURN VALUE
   On success, the number of bytes  read  is  returned  (zero
   indicates  end of file), and the file position is advanced
   by this number.  It is not an  error  if  this  number  is
   smaller  than the number of bytes requested; this may hap
   pen for example because fewer bytes are actually available
   right  now (maybe because we were close to end-of-file, or
   because we are reading from a pipe, or from  a  terminal),
   or  because read() was interrupted by a signal.  On error,
   -1 is returned, and errno is set  appropriately.  In  this
   case  it is left unspecified whether the file position (if
   any) changes.

...

ERRORS

...

   EAGAIN Non-blocking I/O has been selected using O_NONBLOCK
  and no data was immediately available for  reading.


-- 
dg



Re: oftopic: (2) select() O_NONBLOCK

2001-06-02 Пенетрантность Daniel Ginsburg
On Sat, Jun 02, 2001 at 04:59:52PM +0400, Konstantin Sorokin wrote:
 On Sat, Jun 02, 2001 at 04:40:53PM +0400, Daniel Ginsburg wrote:
  Stevens. APUE. Полная библиографическая ссылка в разных FAQ. В FAQ из
  comp.unix.programmer она точно есть.
 
 А можно как-нибудь Stevens'а в России купить? Или только из-за
 границы...
 

В Фолькоме. Адрес был в FAQ из fido7.ru.books.computing.
Мне это обошлось в $80, но скажу от всего сердца: эта книга стоит этих
денег.

-- 
dg



Re: oftopic: (2) select() O_NONBLOCK

2001-06-02 Пенетрантность Konstantin Sorokin
On Sat, Jun 02, 2001 at 05:08:56PM +0400, Daniel Ginsburg wrote:
 On Sat, Jun 02, 2001 at 04:59:52PM +0400, Konstantin Sorokin wrote:
  On Sat, Jun 02, 2001 at 04:40:53PM +0400, Daniel Ginsburg wrote:
   Stevens. APUE. Полная библиографическая ссылка в разных FAQ. В FAQ из
   comp.unix.programmer она точно есть.
  
  А можно как-нибудь Stevens'а в России купить? Или только из-за
  границы...
  
 
 В Фолькоме. Адрес был в FAQ из fido7.ru.books.computing.
 Мне это обошлось в $80, но скажу от всего сердца: эта книга стоит этих
 денег.


А не могли бы Вы мне посоветовать что именно из Стивенса надо покупать
прежде всего. Ведь он автор довольно большого количества книг, а все
купить, понятно, я не могу. Не назовете, скажем, 3 его книги в порядке
убывания важности (полезности etc).

-- 
WBR, Konstantin V. Sorokin
GnuPG key fingerprint = 37A1 D039 0F07 774A BE34  428B 1E11 18BA 735B 7797
:wq


pgpGVcgNlO1nR.pgp
Description: PGP signature