一時的なファイル名を取得するためのこのコードは、空の文字列を返しています。私が見つけることができるすべての doco はmkstemp
、 のような形式が必要であると言っているので、それがどのように機能したかを理解しようとしていますが/tmp/prefixXXXXXX
、ここではそれは使用されていません。
function get_Temp_Name
return String
is
Temp_File_Name : String (1 .. 25) := (others => ' ');
C_Buffer : aliased Interfaces.C.Char_Array := Interfaces.C.To_C(Temp_File_Name, Append_Nul => True);
C_Ptr : constant Interfaces.C.Strings.Chars_Ptr := Interfaces.C.Strings.To_Chars_Ptr(C_Buffer'Unchecked_Access);
Result_Ptr : Interfaces.C.Strings.Chars_Ptr;
begin
Result_Ptr := C_Mkstemp(C_Ptr);
return Ada.Strings.Fixed.Trim(Interfaces.C.To_Ada(C_Buffer, True), Ada.Strings.Both);
EXCEPTION
when Error : others =>
-- redacted
raise;
end Get_Temp_Name;
これは古い呼び方ですか?
ディレクトリのパーミッションは の実行に影響しC_Mkstemp()
ますか?
編集: の定義/インポートC_Mkstemp
:
function C_Mkstemp( template : Interfaces.C.Strings.Chars_Ptr )
return Interfaces.C.Strings.Chars_Ptr;
pragma Import(C, C_Mkstemp, "mkstemp");