代码之家  ›  专栏  ›  技术社区  ›  Kingsley

Ada95调用C\u Mkstemp()

  •  0
  • Kingsley  · 技术社区  · 5 年前

    获取临时文件名的代码返回的是空字符串。我想知道它是怎么工作的 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");
    
    0 回复  |  直到 5 年前