реклама на сайте
подробности

 
 
> подскажите плз по программированию под линукс
vhlshik
сообщение Sep 17 2005, 20:57
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 178
Регистрация: 24-12-04
Из: kharkov
Пользователь №: 1 663



подскажите плз!
мне надо написать програмку под линукс на обычный х86.
не могу найти аналогов досовских функций kbhit (возвращает единицу, если была нажата клавиша) и findfirst/findnext (поиск файлов). Есть ли что-то подобное под линуксом?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Olej
сообщение Sep 18 2005, 19:47
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(vhlshik @ Sep 17 2005, 23:57)
мне надо написать програмку под линукс на обычный х86.
не могу найти аналогов досовских функций kbhit (возвращает единицу, если была нажата клавиша) и findfirst/findnext (поиск файлов). Есть ли что-то подобное под линуксом?
*


Не нужно пробовать никакой google... wink.gif

1. Это не важно, "обычный" х86, или самый "необычны" ... вас интересует использовать набор функций, из числа определённых в POSIX, которые к платформе не относятся...

2. ... а почему, собственно, в стандарте POSIX, который развивается, исправляется, дополняется, обсуждается эдак лет ... 35 - должны быть "приблуды" (kbhit, findfirst/findnext, и ещё многое другое...) придуманные MS для какого-то DOS? У вас принципиально неправильный подход: искать в POSIX эквиваленты "приблудам", вместо этого лучше обстоятельно посидеть над POSIX...

3. относительно ваших функций:

3.1. kbhit - в POSIX любой ввод может быть блокирующий или неблокирующий, поэтому необходимости в таком безобразии как kbhit не возникает... Вам достаточно перевести ваш поток ввода в неблокирующий режим, ... напр. см. fctl() со 2-м аргументом F_SETFL и 3-м O_NONBLOCK (или O_NDELAY в POSIX). Для SYSIN это можно сделать и проще, установками setbuf() (может я и ошибся в названии функции, давно не пользовался, но что-то такое...). После этого простейший getc() (и любая функция ввода) будет вам и источником информации - был ли фактический ввод.

3.2. findfirst/findnext - см. dirent.h.
Что-то типа:
Код
   DIR* dirp = opendir( "/bla-bla-bla" );
   if( dirp == NULL )
      cout << "no directopy!" << endl, exit( EXIT_FAILURE );
   struct dirent* direntp;
   for( int i = 0;; i++ ) {
       if( ( direntp = readdir( dirp ) ) == NULL ) break;
       cout << direntp->d_name << endl;
       // ... делаете ещё что с найденным именем в каталоге
  };

- это работающий код из QNX, но я сильно предполагаю (я не проверял компиляцию в Linux), что он не меняя ни буквы будет тот-же и в Linux (всё это чисто POSIX API).
Структуры и типы (dirent и др.) см. dirent.h.
А все вызовы API работы с каталогами (opendir(), readdir(), closedir(), seekdir(), telldir(), ...):
$ man <имя_функции>

... этого более чем достаточно wink.gif.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 27 2005, 15:43
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Olej @ Sep 18 2005, 22:47)
3.2. findfirst/findnext - см. dirent.h.
Что-то типа:
Код
   DIR* dirp = opendir( "/bla-bla-bla" );
   if( dirp == NULL )
      cout << "no directopy!" << endl, exit( EXIT_FAILURE );
   struct dirent* direntp;
   for( int i = 0;; i++ ) {
       if( ( direntp = readdir( dirp ) ) == NULL ) break;
       cout << direntp->d_name << endl;
       // ... делаете ещё что с найденным именем в каталоге
  };

- это работающий код из QNX, но я сильно предполагаю (я не проверял компиляцию в Linux), что он не меняя ни буквы будет тот-же и в Linux (всё это чисто POSIX API).
Структуры и типы (dirent и др.) см. dirent.h.
А все вызовы API работы с каталогами (opendir(), readdir(), closedir(), seekdir(), telldir(), ...):
*

"Вы будете смеяться", но ЭТО работает и под MS DOS (borland C, всё тот же dirent.h)


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 03:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.02052 секунд с 7
ELECTRONIX ©2004-2016