|
Дата: 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
|
|
Дата: 6 Июн, 14:56
AG - Спасибо.  Получилось.
Благодаря исходникам и получилось. Просто чтением хелпов (с описанием нужных функций) задачу эту, по-моему, и не решить. |
|
Дата: 6 Июн, 18:20
vpl Благодаря исходникам и получилось. Просто чтением хелпов (с описанием нужных функций) задачу эту, по-моему, и не решить.
Угу.. Сейчас все на много проще стало. Когда-то я sin дизассемблером тырцал чтоб понять как он вообще инфу о системе собирает... Тогда я и нашел пасхальные яйца типа "sin toomuch"...  |