QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Thursday, 20 Nov 2008 16:41
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Программирование под QNX 4.x —› Флаг 'файл открыт'

Посл.ответ Сообщение


Дата: 15 Май,  15:03

Здравствуйте.

Не знает ли кто-нибудь как из программы можно узнать по имени файла открыт ли он уже кем-то для записи или нет.

Пробовал через opendir, readdir, closedir. Не нашёл там такого флага. S_ISBLK не подходит, я экспериментировал.

Искать в папке файл с таким же именем в начале, а после него точки, цифры и в конце '$' не подходит, т.к. это vedit такой файл делает, а если другая программа файл откроет, то такого файла не создастся.

dev_info число открытий для com-порта показывает, для файла не годится.

sin files даёт флаги файлов, но там длинный путь сокращается через '*'. Разбор вывода не поможет.

Я в тупике...


Дата: 15 Май,  17:20

sin просматривает список выполняющихся процессов и для каждого из них выводит список открытых файлов (с флагами доступа). Это делается через функции qnx_psinfo() и qnx_fd_query() соответственно.


Дата: 19 Май,  09:21

Ага. Начало получаться. Спасибо.

Иду по процессам, иду по файловым дескрипторам каждого процесса.

Но не улавливаю как вынуть имя файла для каждого дескриптора. Структура stat не содержит имени. В дескрипторе тоже нет. Номер дескриптора является уникальным только в рамках одного процесса. В структуре файла FILE имя есть, но не понятно как связать эту структуру с процессом и дескриптором.

А между тем, sin показывает имя файла, значит как-то он это связывает...

В моей задаче надо шагать по папкам и по разному обрабатывать открытые и не открытые файлы. Я через opendir, readdir, closedir это делаю. И в мойм распоряжении есть только имена файлов.

А почему при qnx_psinfo, qnx_fd_query выводится большее число процессов и файлов для процессов чем при 'sin files'?

------------------------------------
В надежде на продолжение помощи...
vpl (ЛВ)


Дата: 19 Май,  09:39 · Поправил: Roman St.Zhavnis

Есть вроде такая функция:
int qnx_fd_query( pid_t proc_pid, pid,
int fd,
struct _fd_entry *buf );
The qnx_fd_query() function returns an entry from the file descriptor table for process pid's file descriptor fd on the node indicated by proc_pid.


Дата: 19 Май,  09:42

Не поверите, но тут: http://community.qnx.com/integration/viewcvs/viewcvs.cgi/trunk/utils/s/sin/qnx4/?root=core os_pub&system=exsy1001 есть исходники утилиты sin для четверки...


Дата: 6 Июн,  14:56

AG - Спасибо. Получилось.

Благодаря исходникам и получилось. Просто чтением хелпов (с описанием нужных функций) задачу эту, по-моему, и не решить.


Дата: 6 Июн,  18:20

vpl
Благодаря исходникам и получилось. Просто чтением хелпов (с описанием нужных функций) задачу эту, по-моему, и не решить.


Угу.. Сейчас все на много проще стало. Когда-то я sin дизассемблером тырцал чтоб понять как он вообще инфу о системе собирает... Тогда я и нашел пасхальные яйца типа "sin toomuch"...

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source