2008-10-01 42 views

Trả lời

17

Sử dụng một trong các chức năng thư viện chuẩn "mktemp": mktemp/mkstemp/mkstemps/mkdtemp.

Chỉnh sửa: đồng bằng mktemp có thể không an toàn - mkstemp được ưu tiên.

+2

các lợi ích này đã được xử lý FILE đã mở, không kết hợp với luồng IO của C++. Điều gì nếu bạn cần, ví dụ, để sử dụng std :: wofstream để ghi vào tập tin mới này? – Andrey

-2

Bạn chỉ cần kiểm tra xem tệp bạn đang cố viết có tồn tại không. Đây là vấn đề về khóa. Tệp cũng có chủ sở hữu, do đó nếu bạn đang thực hiện đúng quy trình sai sẽ không thể ghi vào đó.

0

người tmpfile

Các tmpfile() chức năng mở một tập tin tạm thời độc đáo trong hệ nhị phân đọc/ghi (w b +) Chế độ. Tệp sẽ tự động bị xóa khi nó bị đóng hoặc chương trình chấm dứt.hiển thị

6

tmpnam(), hoặc bất kỳ điều gì mang lại cho bạn tên sẽ dễ bị tổn thương trong điều kiện chủng tộc. Sử dụng một cái gì đó được thiết kế cho mục đích này mà trả về một xử lý, chẳng hạn như tmpfile():

#include <stdio.h> 

    FILE *tmpfile(void); 
0

mktemp nên làm việc hoặc nếu không có được một trong những rất nhiều thư viện có sẵn để tạo ra một UUID.

0

Chức năng tmpnam() trong thư viện chuẩn C được thiết kế để giải quyết vấn đề này. Ngoài ra còn có tmpfile(), trả về một handle file mở (và tự động xóa nó khi bạn đóng nó).

+0

Không sử dụng tmpnam(). Từ trang người đàn ông: "Không sử dụng chức năng này. Hãy sử dụng mkstemp (3) hoặc tmpfile (3) để thay thế." – twk

+0

Rất tiếc. Tôi đã không chú ý đến phần "trên Linux" của câu hỏi. mkstemp() có lẽ là giải pháp đúng, nếu bạn không cần tính di động. –

Các vấn đề liên quan