文件创建并不总是成功
File creation doesn't always succeeded
我需要在 /tmp
路径中创建 1000 个临时文件。下面是我使用 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('[=10=]');
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;
}
}
}
注意:我在完成工作后删除了文件。
有人可以解释为什么这种方法失败并提出更好的方法吗?
std::cout<<"count = "<<i++ <<std::endl;
^^^
除了 for
循环之外,您还增加了 i
。
结果我从 0 到 2、4、6、8 等等,循环只运行了 500 次。
将其更改为 std::cout<<"count = "<<i <<std::endl;
,看看结果如何...
我还看到你也在上面做 j++
,但我没看到 j
在哪里定义?
我需要在 /tmp
路径中创建 1000 个临时文件。下面是我使用 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('[=10=]');
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;
}
}
}
注意:我在完成工作后删除了文件。
有人可以解释为什么这种方法失败并提出更好的方法吗?
std::cout<<"count = "<<i++ <<std::endl;
^^^
除了 for
循环之外,您还增加了 i
。
结果我从 0 到 2、4、6、8 等等,循环只运行了 500 次。
将其更改为 std::cout<<"count = "<<i <<std::endl;
,看看结果如何...
我还看到你也在上面做 j++
,但我没看到 j
在哪里定义?