OK, mkstemp
là cách ưu tiên để tạo tệp tạm thời trong POSIX.Cách tạo std :: ofstream thành tệp tạm thời?
Nhưng nó sẽ mở tệp và trả về một int
, là bộ mô tả tệp. Từ đó tôi chỉ có thể tạo một FILE *, nhưng không phải là std::ofstream
, mà tôi thích trong C++. (Rõ ràng, trên AIX và một số hệ thống khác, bạn có thể tạo một std::ofstream
từ một bộ mô tả tệp, nhưng trình biên dịch của tôi phàn nàn khi tôi thử điều đó.)
Tôi biết tôi có thể lấy tên tệp tạm thời bằng tmpnam
và sau đó tự mở ofstream với nó, nhưng đó là dường như không an toàn do điều kiện chủng tộc, và kết quả là một trình biên dịch cảnh báo (g ++ v3.4 trên Linux.):
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
vì vậy, có cách nào di động để tạo ra một std::ofstream
đến một temp tập tin?
Điều đó không biên dịch với g ++ v3.4.4 của tôi trên Linux. Rõ ràng chỉ có một số nền tảng có chức năng đó. – Frank
Cảm ơn! Đối với phương pháp thứ hai của bạn (bằng cách sử dụng mkstemp và sau đó ofstream): Đó là vẫn còn hiệu quả về I/O? Điều đó sẽ truy cập vào hệ thống tập tin hai lần, phải không? Hệ thống tập tin của chúng tôi là siêu chậm và tôi lo lắng rằng nó sẽ đặt một gánh nặng không cần thiết vào nó. – Frank
strdup không phải là di động, hoặc là ... – Sol