Вам нужно будет получить pid запущенного процесса.Как только вы получите pid, вы можете сделать
cat /proc/[pid]/fdinfo/<fd number>
Вам также нужно будет знать номер fd открываемого файла.
В нем будет отображаться поле флагов.Поле flags представляет собой восьмеричное значение, отображающее флаги, переданные для открытия дескриптора файла fd.Вам нужно проверить его, чтобы узнать, установлен ли O_DIRECT
или нет.
Например, на моей машине с Ubuntu (X86_64) я создал 2 файла - foo1 & foo2
touch foo1 foo2
и затем открыл foo1 с O_DIRECT
и foo2 без O_DIRECT
.Ниже приведена программа
#define _GNU_SOURCE
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
printf("%u\n", getpid());
int fd1 = open("foo1", O_RDWR|O_DIRECT); //O_DIRECT set
printf("foo1: %d\n", fd1);
int fd2 = open("foo2", O_RDWR); //Normal
printf("foo2: %d\n", fd2);
sleep(60);
close(fd1);
close(fd2);
return 0;
}
При запуске этого я получил вывод:
8885
foo1: 3 //O_DIRECT
foo2: 4
8885 is the pid. So I did
cat /proc/8885/fdinfo/3 //O_DIRECT
pos: 0
flags: 0140002
mnt_id: 29
-------------------------------
cat /proc/8885/fdinfo/4
pos: 0
flags: 0100002
mnt_id: 29
Из вышеприведенного вывода вы можете видеть, что для O_DIRECT
в поле флагов 0040000
также установлен.