LINUX.ORG.RU

Вопрос непонятен.

Если у тебя есть файловый дескриптор, то ты уже открыл файл, не?

Или я чего-то не допонял? Уточни.

OldFatMan
()
Ответ на: комментарий от OldFatMan

Если у тебя есть файловый дескриптор, то ты уже открыл файл, не?

Быть может ему надо определить - занят ли дескриптор...

Deleted
()

ну ппц… да любую недеструктивную операцию над файлом проведи, lseek(fd, 0, SEEK_CUR), fstat() и т.п. и проверь возвращаемое значение…

arsi ★★★★★
()

можешь ещё в /proc/self/fd/ глянуть :)

arsi ★★★★★
()
Ответ на: комментарий от Deleted

Так пусть так и напишет.

Уже не в первый раз - подробности объявляемых задач из спрашивающих клещами и пытками вытягивать приходится. :)

Тогда сделать fdopen - если ошибка, то дескриптор уже занят. Вроде так?

OldFatMan
()
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>

int main () {
	int fd = open("/dev/null", O_RDONLY);
	if (fd == -1) {
		perror("open");
		return 1;
	}
	
	int flags = fcntl(fd, F_GETFL);
	printf("file %s\n", flags == -1 && errno == EBADF ? "closed" : "opened");
	
	close(fd);
	flags = fcntl(fd, F_GETFL);
	printf("file %s\n", flags == -1 && errno == EBADF ? "closed" : "opened");
	
	return 0;
}
Olegymous ★★★
()
Ответ на: комментарий от Olegymous

int flags = fcntl(fd, F_GETFL);

Да, можно так. Уже выяснил. Но всё-равно - спасибо.

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.