Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2015, 19:22   #1
_Osaka
Пользователь
 
Регистрация: 04.10.2012
Сообщений: 38
По умолчанию как проверить отрыт ли файл данным процессом?

Хочу написать такой код
Код:
if(файл отрыт данным процессом)
    close(дескриптор_этого_файла);
Как осуществить такую проверку?
Ведь тот-же дескриптор может быть освобождён, а потом присвоен новому фалу.
_Osaka вне форума Ответить с цитированием
Старый 20.12.2015, 21:16   #2
_Osaka
Пользователь
 
Регистрация: 04.10.2012
Сообщений: 38
По умолчанию

Верно ли такое решение?

Если получить struct stat
для декриптора (функция fstat(2))
и для файла (функция stat(2))

И у этих двух struct stat совпадут соответствен поля
st_dev
st_ino
тогда это одни и тот же файл!

Если дескриптору не занят файлом, будет ошибка errno == EBADF.
Код:
int main (int argc, char *argv[])
{
	//НАЧАЛО ПРОГРАММЫ ПОТОКА1
	int fileDescript = open("mydir/myfile.txt", O_APPEND);

	//... КАКОЙ-ТО КОД (ЛЮБОЙ)

	//КОНЕЦ ПРОГРАММЫ (ПОРА ВСЁ ЗАКРЫВАТЬ)
	struct stat D_st, F_st;//информация о фале

	stat("mydir/myfile.txt", &F_st);//F_st =  (именно того что в начаеле откр)
	int isError = fstat(fileDescript, &D_st);//D_st = stat о fileDescript 

	if(!isError)
	{
		if(sameFile(D_st, F_st))
		   close(fileDescript);//Если ОДИН И ТОТ ЖЕ ФАЙЛ
		return EXIT_SUCCESS;
	}
	else if(errno == EBADF)
		return EXIT_SUCCESS;//ВСЁ ВПОРЯДКЕ ФАЙЛ УЖЕ ЗАКРЫТ (вроде как)
	else
		return EXIT_FAILURE ;//ПЛОХО КАКАЯ-ТО ОШИБКА 
}	
bool sameFile(stat &D, stat &F)//один тот же файл
{	return D.st_dev == F.st_dev  &&  D.st_ino == F.st_ino;
}

Последний раз редактировалось _Osaka; 20.12.2015 в 21:38.
_Osaka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файл занят другим процессом muk07 C++ Builder 3 23.09.2015 17:46
Файл занят другим процессом vovaza29 C# (си шарп) 5 26.08.2015 13:48
Файл занятый другим процессом Thandem Помощь студентам 0 26.09.2010 01:33
Файл занят другим процессом Adonidi Общие вопросы Delphi 4 25.03.2010 21:38
Проверить наличие листа с данным названием Sega Microsoft Office Excel 2 05.08.2008 17:18