Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Как определить конец файла?  (Прочитано 65731 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SSW
Гость
« : 09-07-2003 18:47 » 

Хочу из файла прочитать строки и загнать в масив.
Есть в Паскале такая функция EOF(f) в VC такой не нашел поэтому делал так:
Код:
CStdioFile fb("boardbase.ssw", CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite );
strok1=1;
while  (fb.GetPosition()<fb.GetLength())
|
  fb.ReadString(ListG1[strok1]);
  fb.ReadString(ListG3[strok1]);
  strok1++;
}
fb.Close;

Такой метод работал до сегодняшнего дня. Может кто знает другой метод? Как закончить цыкл?
« Последнее редактирование: 19-11-2007 06:59 от RXL » Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 09-07-2003 19:01 » 

while(ReadFile(...))
{


}

Все  Отлично
Записан

А птичку нашу прошу не обижать!!!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 09-07-2003 19:11 » 

Почитай внимательно help на CStdioFile, а конкренто о методе ReadString. Наверняка он возвращает что-то, индицирующее конец файла. Быстрее всего 0.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #3 : 09-07-2003 19:48 » 

Цитата
Почитай внимательно help на CStdioFile, а конкренто о методе ReadString. Наверняка он возвращает что-то, индицирующее конец файла. Быстрее всего 0.

вот выдежка из MSDN.
Return Value
A pointer to the buffer containing the text data. NULL if end-of-file was reached without reading any data; or if boolean, FALSE if end-of-file was reached without reading any data.
по руски:
возврышяет указатель на буфер содержащий данные.
возврышает NULL если был достигнут конец без чтения данных; или в булевом виде, FALSE если был достигнут конец без чтения данных.
Записан

Странно всё это....
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #4 : 09-07-2003 20:56 » 

Вот уж не понимаю зачем класами MFC пользоваться когда CreateFile ReadFile и WriteFile под боком - удобнее ведь, а строку по \r\n в конце всегда определить можно - и работает на порядок быстрее - проверено.
Записан

А птичку нашу прошу не обижать!!!
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #5 : 09-07-2003 23:18 » 

Цитата: Гром
Вот уж не понимаю зачем класами MFC пользоваться когда CreateFile ReadFile и WriteFile под боком - удобнее ведь, а строку по \r\n в конце всегда определить можно - и работает на порядок быстрее - проверено.
По своей сути CStdioFile не класc MFC это классовая оболочка fopen и прочего и класической stdio.h с другой стороны CreateFile ReadFile и WriteFile более коректно использовать в привении к Windows, а не стандарные io т.к. CreateFile ReadFile и WriteFile поддерживают такие понятия как права доступа, способы разделения и прочее, кроме того умеет открывать диски, директории, тома дисков, консольные буфера, ленточные накопители, комуникационные ресурсы, mailspots и pipe.
И это всё мы получили двумя минутами ковыряния в MSDN!  Жжешь  Жжешь  Жжешь
Записан

Странно всё это....
SSW
Гость
« Ответ #6 : 09-07-2003 23:47 » 

М-м-да! Жаль
Похоже мой способ всетаки работает.
Или компилятор глючит или лажа в чем-то другом.
Надо поспать.
Спасибо за советы.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #7 : 10-07-2003 03:38 » 

Правильно я вот уже в 10:00 вечера лёг! и проснулся в 7:00 утра (на работе  Отлично ) правда иногда приходилось просыпатся. Я смотрел что тутачкинового и далше спать. Улыбаюсь

Кстати наши способы должны работать, а именно:
Код:
while  (fb.ReadString(text))
{   
  strok1++;
  ......
}

Хотя проверить не могу я всё больше Borlandom интерисуюсь и VC в глаза не видел. Жаль
« Последнее редактирование: 19-11-2007 06:59 от RXL » Записан

Странно всё это....
NeilPryde
Гость
« Ответ #8 : 10-07-2003 13:27 » 

Цитата: LogRus
По своей сути CStdioFile не класc MFC это классовая оболочка fopen и прочего и класической stdio.h


Цитата из MSDN: CStdioFile. This class is derived from CFile.
И еще одна: CFile. This class is the base class for Microsoft Foundation Classes (MFC).
MFC – все равно подключится, не зависимо от сути.
Записан
awolf
Гость
« Ответ #9 : 10-07-2003 13:38 » 

А еще проще использовать функции fopen, fread, fwrite ... В этом наборе есть такая функция кака feof. Просто и удобно. Поддерживается также форматированный ввод/вывод в файлы.  Жжешь
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #10 : 11-07-2003 05:08 » 

fopen, fread, fwrite etc. лучше использовать если пишешь платформонезависимый код (ну или предполагается, что когда-нить он может быть таким). Если писать исключительно под Win, то лучше использовать CreateFile, ReadFile/WriteFile. ну или CFile и его потомков.
Записан

Megabyte be with you!
awolf
Гость
« Ответ #11 : 11-07-2003 07:01 » 

Lex, речь идет не о том, что лучше или хуже использовать - это уже вопрос личных предпочтений и необходимости. Речь идет об определении конца файла. Я предложил использовать feof.
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #12 : 11-07-2003 07:22 » 

awolf, угу и от этих личных предпочтений будет зависеть как определять конец файла Ага
Записан

Megabyte be with you!
awolf
Гость
« Ответ #13 : 11-07-2003 07:36 » 

В этом я абсолютно согласен. Но личные предапочтения не мешают выдвинуть версию ответа.  Ага
Записан
awolf
Гость
« Ответ #14 : 11-07-2003 07:40 » 

Кстати, Lex, от тебя люди не услышали пока ни одной версии определения "конца" файла. Может поделишься "тайным знанием" своим?  Ага
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #15 : 11-07-2003 07:49 » 

Моя версия мало чем отличается от тех, что здесь высказаны.
если у меня используется fopen/fread/fwrire то это feof().
Если CreateFile/ReadFile, то по количеству считанных байт и сравнению с запрошенным количеством.
Если MFC, то по тому, что вернула CFile::ReadFile()

Все это уже народ написал выше, зачем это дублировать.
Записан

Megabyte be with you!
awolf
Гость
« Ответ #16 : 11-07-2003 07:57 » 

Отлично
Записан
Джон
Гость
« Ответ #17 : 11-07-2003 09:54 » 

Держите, на больше времени нет (к сожалению):

EOF() = начало файла + длинна файле

псевдо код для усех (VC BCB etc)

размер буфера = ::GetFileSize(hFile, NULL);
// hFile конечно берём из CreateFile(...)

*буффер = new byte[размер буфера]
unsigned int  скока прочитал;
ReadFile(hFile, буффер, размер буфера, &скока прочитал,NULL);

потом в буффере ищешь \r\n (Win) или только \r(Linux) и запихиваешь
их в массив

Ещё, если точно известно, что это текстовый файл, то концовка может быть '\0'
но это не обязательно
Записан
awolf
Гость
« Ответ #18 : 11-07-2003 10:10 » 

Джон, В таком случае у тебя должен быть эксклюзивный доступ к файлу, чтобы никакая другая тулза не могла писать в этот файл. Потому что между вызовами GetFileSize и ReadFile размер файла может измениться.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #19 : 11-07-2003 10:13 » 

Класс каких только техник не увидишь. Просматривая ответы на казалосьбы простой вопрос! Улыбаюсь
Записан

Странно всё это....
awolf
Гость
« Ответ #20 : 11-07-2003 10:21 » 

Я немного отступлю от темы.
Помню, когда я только начинал программить, то тупо вызывал функции для работы с теми же файлами, проверку на ошибки соответственно не делал. Ньюансы типа эксклюзивного доступа тоже не учитывал - блин и все работало нормально, так как надо.
А щас сядешь, репу почешешь, кучу ситуаций учтешь - исходник раздувается до неимоверных размеров.
Леший побрал бы эти условности Жжешь
Записан
Джон
Гость
« Ответ #21 : 11-07-2003 10:23 » 

к awolf
правильно, чтоб совсем чисто было (блин старею)
эт делается в CreateFile с FILE_SHARE_READ (например)

хотя на практике... если разве что на мулти платформе
но замечание правильное

зы Закрыть конечно тоже надо опосля CloseFile(hFile);
Записан
Джон
Гость
« Ответ #22 : 11-07-2003 10:28 » 

к awolf
Эт точно - на практике (честно) ни разу проблем не было.
Но раз на то пошло то надо и такие вещи делать:

char *psz = new char[256];

if(psz==NULL)
{
    // Нету 256 байт памяти!!! помогите!!!!
     throw(0);
}

но кто это делает? я - никогда
Записан
awolf
Гость
« Ответ #23 : 11-07-2003 10:29 » 

Есть же функции блокировки/разблокировки регионов файлов LockFile/UnlockFile
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #24 : 11-07-2003 11:07 » 

Есть много типов блокировки - но файл шарить не надо никогда, только в случае необходимости, так как обычно 99.99% случаев файл не нужен больше никому.
Блокировать соответственно тоже не обязательно.

Джон - ты б зарегился что ли, удобнее ведь Улыбаюсь

Насчет проверки выделения памяти - это сегодня не делают из-за винды, а ты попробуй критичную прогу написать когда в микроконтроллере програмишь, вот там мы и похохочим  Ага
Записан

А птичку нашу прошу не обижать!!!
awolf
Гость
« Ответ #25 : 11-07-2003 12:25 » 

Есть еще вариант - это создание временной копии файла и, соответственно, работа с временной копией.
Насчет проверки выделения памяти - даже в винде есть момент, malloc возвращает NULL. Так что проверка всегда актуальна.
А на микроконтроллерах - так и подавно.
Записан
Джон
Гость
« Ответ #26 : 11-07-2003 13:13 » 

Грому,
ну дык, я ж в высокие то материи-то и не лезу. В виду имелось то, что практически
нарабатывал. У 90% (вру) юзеров стоят винды, а про другое и знать не хотят.
А потому за то и  платят. Как ни крути, а жить на что-то надо. Не знаю как у других,
(может расскажут?)  а у нас за дополнительные строчки кода не платят. Главное
быстрее и проще, если надёжно тоже не возбраняется. А как начнёшь "умничать" так считай, что попал...
Ладно, а то разболтался, да ещё не по теме.
Насчёт "зарегиться" - чесно - очень хочу, но пока нет времени - точнее стабильного
расписания. IMHO самый классный сайт и форумы у вас тут. Парни почти всегда в тему советуют, а не умничают, как на некоторых. Если чёто в MSDN не нахожу к вам бегу сразу. Как и в этот раз... Но и на старуху как говорится... У меня вообще-то любовь к "железу" чисто платоническая (поэтому и сомнения на счёт регистрации, смогу-ли быть полезным?). Но волею судеб пришлось вот. Кстати, извиняюсь сразу за "не в тему", просто пользуюсь случаем. Не знал в какой форум вопрос задать, ключевые слова WriteFile() LPT TimeOut. При простой записи в порт, если он не принимает, висит WriteFile() аж 90 секунд - стабильно. Откуда такая магическая цифра берётся? Открываю CreateFile(LPT1,...,Overlapped=NULL)  те синхронно, но почему 90 сек? А не скажем 45? Да... посылается 10 байт. Вот ... может чего присоветуешь? Или пошлёшь .... Улыбаюсь ...  в правильный форум.

А зарегестрируюсь обязательно...
Записан
awolf
Гость
« Ответ #27 : 11-07-2003 13:28 » 

Джон, магическая цифра 90 может объясняться тем, что драйвер LPT-порта по умолчанию ставит таймаут по чтению в 90 секунд.
Записан
awolf
Гость
« Ответ #28 : 11-07-2003 13:34 » 

Можно попробовать использовать SetCommTimeouts для изменения этого таймаута.
Записан
Джон
Гость
« Ответ #29 : 11-07-2003 13:37 » 

Не фурычит, те такая же штука прокатывает с СОМ, а вот параллельный никак
Записан
awolf
Гость
« Ответ #30 : 11-07-2003 13:38 » 

Блииин, с инетом траблы. Сообщение продублировалось.  :?
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #31 : 11-07-2003 13:43 » 

Лишне удалил.

Вообще это лучше в драйверах спросить. Таймаут порта от драйвера зависит и там устанавливается.
Записан

Megabyte be with you!
awolf
Гость
« Ответ #32 : 11-07-2003 13:43 » 

Я вообще использую OVERLAPPED чтение/запись в порты. Очень удобно. Во всяком случае можно регулировать таймаут ожидания события окончания операции. При неуспешном ожидании можно операцию отменить.
Записан
Джон
Гость
« Ответ #33 : 11-07-2003 13:50 » 

была такая идея, через DeviceIoContro() только с каким кодом?
используется стд драйвер под w2k sp4. Но в идеале должно на работать
на всех платформах. Может его (таймаут) можно как-нить установить?
Покопался на гуглях, но там только вопросы - народ похоже мучаеся с этим
с конца прошлого тысячелетия - офигеть!!! Улыбаюсь
Записан
Джон
Гость
« Ответ #34 : 11-07-2003 13:56 » 

Думал и про это, сложновато - у меня уже и так 3 нитки висит. А потом, насколько медленне будет при нормальных условиях? когда данные уходят без проблемм.
Свой таймаут у меня тоже есть, проблема - WriteFIle() долго висит, хоть ты дерись.
Выпрыгивал бы он побыстрее всё было бы Хокей.
Записан
awolf
Гость
« Ответ #35 : 11-07-2003 13:58 » 

IOCTL можно посмортреть в NT DDK. Там же и описание структур для IoCtl-запросов.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #36 : 11-07-2003 14:01 » 

Цитата: Джон
к awolf
Эт точно - на практике (честно) ни разу проблем не было.
Но раз на то пошло то надо и такие вещи делать:

char *psz = new char[256];

if(psz==NULL)
{
    // Нету 256 байт памяти!!! помогите!!!!
     throw(0);
}

но кто это делает? я - никогда


Я всегда делаю.
Ты тут еще не учитываешь один момент - по Стандарту new при нехватке памяти выбрасывает исключение, это он раньше NULL возвращал, но у Microsoft new наверно всегда NULL будет возвращать.
Записан
awolf
Гость
« Ответ #37 : 11-07-2003 14:01 » 

При Оверлапе WriteFile и ReadFile выпрыгивают сразу. Тебе самому нужно определять факт завершения(незавершения) операции. Тут ты можешь с этим таймаутом как захочешь играться.
Записан
awolf
Гость
« Ответ #38 : 11-07-2003 14:06 » 

SlavaI, Я тоже контролирую выделение памяти. Это уже как "Отче Наш". Но я пользуюсь malloc и free. Там не надо никаких исключений отслеживать. Все ясно и понятно - если NULL, то значит траблы при выделении памяти.
Записан
awolf
Гость
« Ответ #39 : 11-07-2003 14:09 » 

Джон, В DDR не много IOCTL-кодов для параллельного порта. И кода для установления таймаутов операций нет.  Жаль
Записан
Джон
Гость
« Ответ #40 : 11-07-2003 14:11 » 

Похоже другого пути нет...
Что значит сразу? Нет или лучше так - Сколько байт он отправит (при идеальных условиях) до выпрыгивания?

Может в курсе какого размера буфер можно ему передать зараз. У СОМа можно установить размер FIFO - есть чё-нить похожее у параллельного?
Записан
awolf
Гость
« Ответ #41 : 11-07-2003 14:14 » 

Вот примерно код для Оверлап чтения.
Сразу - это очень сразу.
Кол-во прочитанных/записанных байт определяется GetOverlappedResult.

   BOOL         result;
   unsigned long   com_read, last_error;
   OVERLAPPED      overlap_ctx;

   if (h_com == NULL || data_buf == NULL)
   {
      //printf("comport_read: args\n");
      return -1;
   }

   if (buf_length == 0)
   {
      return 0;
   }

   memset(&overlap_ctx, 0, sizeof(OVERLAPPED));

   overlap_ctx.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
   if (overlap_ctx.hEvent == NULL)
      return -1;

   com_read = buf_length;
   result = ReadFile(h_com, data_buf, buf_length, &com_read, &overlap_ctx);

   if (result != TRUE)
   {
      last_error = GetLastError();

      if (last_error == ERROR_HANDLE_EOF)
      {
         CloseHandle(overlap_ctx.hEvent);

         return -1;
      }
   }

   if (WaitForSingleObject(overlap_ctx.hEvent, 5000) == WAIT_OBJECT_0)
   {
      com_read = 0;
      GetOverlappedResult(h_com, &overlap_ctx, &com_read, FALSE);

      ResetEvent(overlap_ctx.hEvent);
      CloseHandle(overlap_ctx.hEvent);

      return (int)com_read;
   }
   else
   {
      CancelIo(h_com);

      CloseHandle(overlap_ctx.hEvent);
      return 0;
   }
Записан
awolf
Гость
« Ответ #42 : 11-07-2003 14:20 » 

Тут вот еще одни люди говорят, что для оперций с LPT в идеале использовать Оверлапед чтение/запись.
Записан
Джон
Гость
« Ответ #43 : 11-07-2003 14:21 » 

awolf, спасибо, что в ДДК посмотрел у менся его как-раз под рукой нету. Уже хотел было лезть.

SlavaI, Интересно - как это можно проверить?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #44 : 11-07-2003 14:26 » 

to awolf, а зачем тебе OVERLAPPED ты же все равно превращаешь асинхронное чтение в синхронное с помощью WaitForSingleObject, в чем смысл- в пяти секундах? То есть думаешь если не успели прочитать- то ошибка.
И почему если возвращено FALSE ты проверяешь только на ERROR_HANDLE_EOF, там наверно логичнее проверить на ERROR_IO_PENDING и если не он то ошибка пр попытке чтения- иначе началось асинхронное чтение.
Записан
Джон
Гость
« Ответ #45 : 11-07-2003 14:28 » 


avolf,
В общем я ща исправляю ошибки других:
наскоро вот такое набросал:
void CPortLpt::IEEE1284NibbleWrite(byte* pbyBuffer, UINT nBufferLen, UINT* pnBytesWritten)
{
DWORD dwHasWritten = 0;
DWORD dwToWrite = 0;
*pnBytesWritten = 0;

byte* pbyCur = pbyBuffer;

EnterCriticalSection(&m_csThread);

do
{
dwToWrite = nBufferLen > 512 ? 512 : nBufferLen;
WriteFile(m_hPort,pbyCur, dwToWrite, &dwHasWritten,NULL);

// Show written data:
if( m_pPortInterface )
{
for(int i=0; i<dwHasWritten; i++) m_pPortInterface->ShowWriteByte((DWORD)pbyCur[i]);
}

*pnBytesWritten += dwHasWritten;
pbyCur+=dwHasWritten;

if(dwHasWritten!=dwToWrite)
{
break;
}
nBufferLen-=dwHasWritten;
}while(nBufferLen>0);

LeaveCriticalSection(&m_csThread);
}

и вся эта фигня крутится в ещё одном цикле в котором у меня уже есть таймаут
512 - это для меня опять таки магическая цифра, но я её пока оставил. В принципе так работает. Виснит в не зависимости от данных хоть 3 байта хоть 100 кб
« Последнее редактирование: 14-04-2006 22:16 от Алексей1153 » Записан
Джон
Гость
« Ответ #46 : 11-07-2003 14:30 » 

SlavaI, так в этом то и фокус - синхронная висит у меня долго
Записан
awolf
Гость
« Ответ #47 : 11-07-2003 14:31 » 

Это примерный кусок, который еще дорабатывать надо. WaitForSingleObject я использую для регулирования таймаута чтения/записи (хотя здесь намертво задано 5 секунд). ERROR_IO_PENDING возникает, если ReadFile или WriteFile возвращает TRUE (это по собственным наблюдениям).
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #48 : 11-07-2003 14:32 » 

to Джон- чего проверить? Выбрасывает ли исключение при нехватке памяти? У майкрософта не выбрасывает. Если на 32 разрядной винде работаешь  то возьми и попробуй 2 GB памяти получить и узнаешь.
Записан
awolf
Гость
« Ответ #49 : 11-07-2003 14:38 » 

Джон, Можно полазить еще www.sources.ru. Может там че-нить по LPT есть
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #50 : 11-07-2003 14:39 » 

to Джон- вот так проверяй

char* p;
      try
      {
        p = new char[3000000000];
      }catch(...)
      {
         cout<<"Exception"<<endl;
      }
      cout<<((int)p)<<endl;
      return 0;

Не волнуйся - физически тебе иметь много оперативки не надо, так как она только виртуально в этом примере выделится, а физические будут выделяться по мере надобности, но при том объеме, что я запросил выделить в адресном пространстве память невозможно, возвратит NULL;
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #51 : 11-07-2003 14:42 » 

Цитата: awolf
ERROR_IO_PENDING возникает, если ReadFile или WriteFile возвращает TRUE (это по собственным наблюдениям).


Такого не должно быть- должен быть FALSE.
Вот цитатка из SDK
If hFile was opened with FILE_FLAG_OVERLAPPED and lpOverlapped is not NULL, the read operation starts at the offset specified in the OVERLAPPED structure and ReadFile may return before the read operation has been completed. In this case, ReadFile returns FALSE and the GetLastError function returns ERROR_IO_PENDING. This allows the calling process to continue while the read operation finishes.
Записан
Джон
Гость
« Ответ #52 : 11-07-2003 14:49 » 

Мой многолетний опыт показывает, что халявы всё-таки не бывает. Как не мучайся,
а самому делать придется. Поэтому остаётся расчитывать на помощь, простую человеческую помощь.
Да я тут прикинул - за то время пока я это всё искал ужеб асинхронную сделал.
Вот она лень человеческая! Ну да ладно - зато пообщался немного.

Ладно парни - всем спасибо, а то мне ещё до дому 50 км пилить. Так что я сегодня больше не появлюсь.
А кстати - куда вопросы такого рода отправлять? Так никто и не сказал. В Драйверы или Операционнки?

Ну всем пока
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #53 : 11-07-2003 15:41 » 

Глюк
Записан

А птичку нашу прошу не обижать!!!
awolf
Гость
« Ответ #54 : 11-07-2003 16:01 » 

SlavaI, Этот кусок кода относится как раз к тому случаю, когда простая человеческая лень ломит тебя. Но в нем статус IO_PENDING тоже обрабатывается.
Конечно, это кусочек не претендует на "ОСКАР" Голливуда  Отлично
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines