Я использую предварительно скомпилированную функцию библиотеки C (при кодировании себя на C ++), которая открывает файл, не закрывая его.Я подтвердил это, просмотрев список файловых дескрипторов процесса в / proc / {PID} /fd. Каждый раз, когда я вызываю функцию, создается файловый дескриптор, указывающий на тот же файл.
Моя проблема заключается в том, что мне приходится выполнять огромное количество итераций над этой функцией, и в итоге она из-за этого падает.
Конечно, у меня нет указателя на файловый поток, поэтому я не могу использовать fclose.
Я попытался использовать fcloseall (), но он не закрывает ни один из открытых потоков.
Вот некоторый минимальный код:
#include "MatisseSDK.h"
#include <stdio.h>
const int MAX_ITERATIONS = 10000;
for(int i = 0; i < MAX_ITERATIONS ; i++){
result = CallMatisse(...);
int closed = fcloseall();
}
здесь значение closed всегда равно0 и число файловых дескрипторов никогда не уменьшается.
Есть ли другой способ принудительно закрыть эти файловые потоки или мне нужно полностью остановить программу, чтобы уничтожить их?
Вот пример списка файловых дескрипторов:
total 0
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 0 -> /dev/pts/17
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 1 -> /dev/pts/17
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 10 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:25 11 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:25 12 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:25 13 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:25 14 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:27 15 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:25 16 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:27 17 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:27 18 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:27 19 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/CK1.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 2 -> /dev/pts/17
l-wx------ 1 slendorm slendorm 64 29 avril 14:24 3 -> /home/slendorm/Documents/ASPECT/UNITS/TABMATISSE/TEST/res/irradiance.out
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 4 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 5 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 6 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 7 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:25 8 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx
lrwx------ 1 slendorm slendorm 64 29 avril 14:24 9 -> /home/slendorm/Documents/ASPECT/MATISSE/BDD/ATMOS/1D/2/rs.idx