[Win32utils-devel] _mktemp on Windows
Heesob Park
phasis at gmail.com
Sun Jan 15 03:59:23 EST 2012
Hi,
2012/1/15 Daniel Berger <djberg96 at gmail.com>:
> On Fri, Jan 13, 2012 at 9:42 PM, Heesob Park <phasis at gmail.com> wrote:
>> Hi,
>>
>> 2012/1/14 Daniel Berger <djberg96 at gmail.com>:
>>> Is it odd that calling _mktemp more than once in the same process doesn't work?
>>>
>>> require 'ffi'
>>>
>>> class Win
>>> extend FFI::Library
>>>
>>> ffi_lib 'msvcrt'
>>> attach_function :_mktemp, [:string], :string
>>>
>>> def self.mktemp
>>> 5.times{ p _mktemp("rb_file_temp_XXXXXX") }
>>> end
>>> end
>>>
>>> Win.mktemp
>>>
>>> # Output
>>> "rb_file_temp_a03680"
>>> nil
>>> nil
>>> nil
>>> nil
>>
>> According to MSDN, _mktemp is deprecated; consider using _mktemp_s instead.
>>
>> Refer to http://msdn.microsoft.com/en-us/library/34wc6k1f(v=vs.80).aspx
>
> True. I guess they were really serious about it this time. ;)
>
> Unfortunately I'm not sure how to get at _mktemp_s with FFI using
> mingw, since that function doesn't seem to be exported. Suggestions?
>
> Regards,
>
> Dan
Well, I can use _mktemp_s with ffi using migw.
May be it depends on the version of msvcrt.dll.
C:\work>ruby -v mt.rb
ruby 1.9.3p0 (2011-10-30) [i386-mingw32]
"rb_file_temp_a07024"
=======================
require 'ffi'
class Win
extend FFI::Library
ffi_lib 'msvcrt'
attach_function :_mktemp_s, [:string,:int], :string
def self.mktemp
str = "rb_file_temp_XXXXXX"
_mktemp_s(str,21)
p str
end
end
Win.mktemp
======================
Regards,
Park Heesob
More information about the win32utils-devel
mailing list