Я сделал эту функцию:
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <vector>
std::string open_temp(std::string path, std::ofstream& f) {
path += "/XXXXXX";
std::vector<char> dst_path(path.begin(), path.end());
dst_path.push_back('\0');
int fd = mkstemp(&dst_path[0]);
if(fd != -1) {
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;
open_temp("/tmp", logfile);
if(logfile.is_open()) {
logfile << "hello, dude" << std::endl;
}
}
необходимо, вероятно, удостовериться, что назвали umask с надлежащей маской создания файла (я предпочел бы 0600) - в странице справочника для mkstemp говорится, что маска создания режима файла не стандартизирована. Это использует то, что mkstemp изменяет свой аргумент имени файла, что это использует. Так, мы открываем его и закрываем файл, который это открыло (так, чтобы не открыть его дважды), будучи оставленным с ofstream, который подключен к тому файлу.
import random
R = 2
def sample_circle(center):
a = random.random() * 2 * np.pi
r = R * np.sqrt(random.random())
x = center[0]+ (r * np.cos(a))
y = center[1] + (r * np.sin(a))
return x,y
ps = np.array([sample_circle((0,0)) for i in range(100)])
plt.plot(ps[:,0],ps[:,1],'.')
plt.xlim(-3,3)
plt.ylim(-3,3)
plt.show()