Создание файла не всегда успешно

Мне нужно создать 1000 временных файлов в /tmp дорожка. Ниже мой подход с использованием mkstemp (безопасный от гонки), но создание файла ограничено только 500, остальное не удалось.

std::string open_temp(std::string path, std::ofstream& f) {
path += "/preXXXXXX";
std::vector<char> dst_path(path.begin(), path.end());
dst_path.push_back('\0');

int fd = mkstemp(&dst_path[0]);
if(fd != -1) {           //fail condition
std::cout<<"not created count = "<<j++<<std::endl;
// j = 500 why fail it gloabl varibale?
path.assign(dst_path.begin(), dst_path.end() - 1);
f.open(path.c_str(),
std::ios_base::trunc | std::ios_base::out);
close(fd);
}
return path;
}

int main() {
std::ofstream logfile;
for(int i=0;i<1000;i++)
{
std::cout<<"count = "<<i++ <<std::endl;
open_temp("/tmp", logfile);
// ^^^ calling 1000 times but only 500 sucess which is that?
if(logfile.is_open()) {
logfile << "testing" << std::endl;
}
}
}

Примечание: я удалил файлы после выполненной работы.

Может кто-нибудь объяснить, почему такой подход не работает, и предложить лучший, если таковой существует?

-2

Решение

std::cout<<"count = "<<i++ <<std::endl;
^^^

Вы увеличиваете i там в дополнение к for петля.
В результате я перехожу от 0 до 2, 4, 6, 8 и т. Д., И цикл выполняется только 500 раз.
Измените это на std::cout<<"count = "<<i <<std::endl; и посмотреть, как это происходит …

Также я вижу, что ты тоже делаешь j++ выше, но я не вижу, где j определено?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]