У меня есть код на C ++ и Python, который много раз общается друг с другом посредством чтения и записи файлов в каталоге. Они также удаляют некоторые файлы после прочтения данных. Это делается в Ubuntu 17.10.
Однако после выполнения этой последовательности несколько раз (> 6000 - 7000 раз) наступает момент, когда я получаю следующую ошибку:
Couldn't open the directory: Too many open files
Это сообщение об ошибке всегда доставляется из кода C ++.
Для C ++ кода :
Запись данных выполняется с использованием:
std::string opfilepath("/some/path/");
ofstream opfile;
opfile.open (opfilepath);
opfile<<"some stuff"<<endl;
opfile.close()
Количество файлов в каталоге подсчитывается с использованием:
DIR* dirFile = opendir( path );
int count = 0;
if ( dirFile )
{
struct dirent* hFile;
errno = 0;
while (( hFile = readdir( dirFile )) != NULL )
{
if ( !strcmp( hFile->d_name, "." )) continue;
if ( !strcmp( hFile->d_name, ".." )) continue;
if ( strstr( hFile->d_name, ext.c_str() ))
count++;
}
}
closedir( dirFile );
Считывает файл, используя:
std::ifstream file("/some/path");
if (file.is_open())
{
//do something
}
file.close();
И файлы удаляются с помощью:
boost::filesystem::remove("/some/file.txt")
Для Python код:
Файлы записываются с использованием:
f = open("/some/file.txt", "a")
f.write("some stuff")
f.close()
Файлы читаются с использованием:
fp = open(path)
lines = fp.read().splitlines()
fp.close()
И файлы удаляются с помощью:
os.remove("/some/path/and/file.txt")
Все файлы открываются и закрываются по модульному принципу, и синхронизация не является проблемой. Но я продолжаю видеть Слишком много открытых файлов , и всегда после фиксированного числа итераций.
Есть идеи, почему это может происходить?