Tôi đang sử dụng tempnam() chỉ để lấy tên thư mục, vì vậy cảnh báo bảo mật này không áp dụng cho trường hợp của tôi. Làm thế nào tôi có thể vô hiệu hóa nó? Tôi không thể tìm thấy bất kỳ thiết bị chuyển mạch để làm điều đó.Bất kỳ cách nào để tắt `tempnam 'đều nguy hiểm, hãy sử dụng cảnh báo gcc của mkstemp' tốt hơn?
Trả lời
Nếu bạn thực sự chỉ muốn tên thư mục, hãy sử dụng macro không đổi chuỗi P_tmpdir
, được xác định trong <stdio.h>
.
Bạn có thể sử dụng tùy chọn -Wno-deprecated-declarations
của GCC để tắt tất cả cảnh báo như thế này. Tôi đề nghị bạn xử lý các cảnh báo đúng, mặc dù, và có những gợi ý của trình biên dịch.
"Hàm tempnam() trả về một con trỏ tới một chuỗi là tên tệp hợp lệ và sao cho tệp có tên này không tồn tại khi tempnam() được chọn".
Cảnh báo phát sinh do điều kiện cuộc đua giữa kiểm tra và tạo tệp sau.
Bạn chỉ muốn nhận tên thư mục? Điều đó sẽ tốt cho điều gì?
Giống như người lạ đã nói, bạn có thể vô hiệu hóa cảnh báo này (và các cảnh báo tương tự) bằng cách sử dụng -Các tuyên bố không dùng nữa.
Tôi cần tạo tệp FIFO trong một thư mục tạm thời để tôi sử dụng dirname (tempnam ...) – jackhab
Đối với tôi, nó không làm im lặng loại cảnh báo này. – Jack
Đối với tôi nó cũng không bị tắt tiếng, ngay cả với -w – FabioCosta
Đây là cảnh báo được tạo ra ở giai đoạn liên kết, không biên dịch, vì vậy cảnh báo này không có hiệu lực. (Cho nó vào giai đoạn liên kết cũng không hoạt động). (Trong g ++ 4.8.2, ít nhất) –