Module: STemp
- Defined in:
- ext/stemp.c
Class Method Summary collapse
-
.mkdtemp(template) ⇒ String
Wraps
mkdtemp(3)
for Ruby. -
.mkstemp(template) ⇒ File
Wraps
mkstemp(3)
for Ruby. -
.tmpfile ⇒ File
Wraps
tmpfile(3)
for Ruby.
Class Method Details
.mkdtemp(template) ⇒ String
Wraps mkdtemp(3)
for Ruby. See man mkdtemp
on your system for exact semantics.
Notes:
-
template
is overwritten with the eventual directory name. -
raises a
SystemCallError
if any of the syscalls involved fail.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'ext/stemp.c', line 55 static VALUE stemp_mkdtemp(VALUE self, VALUE template) { VALUE duckstr; char *ret; SafeStringValue(template); duckstr = StringValue(template); ret = mkdtemp(RSTRING(duckstr)->ptr); if (NULL == ret) raise_systemcallerror(errno, "in mkdtemp"); return duckstr; } |
.mkstemp(template) ⇒ File
Wraps mkstemp(3)
for Ruby. See man mkstemp
on your system for exact semantics.
Notes:
-
returns a File object rather than a simple file descriptor.
-
template
is overwritten with the eventual directory name. -
raises a
SystemCallError
if any of the syscalls involved fail. -
the Debian manpage for
mkstemp
suggests you shouldn’t use it, but rather stick withtmpfile
. However, I think it’s better all round to have the choice; there are times when you want to know the tempfile name.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'ext/stemp.c', line 85 static VALUE stemp_mkstemp(VALUE self, VALUE template) { VALUE duckstr, filedesc, file; int fd; SafeStringValue(template); duckstr = StringValue(template); fd = mkstemp(RSTRING(duckstr)->ptr); if (-1 == fd) raise_systemcallerror(errno, "in mkstemp"); filedesc = INT2FIX(fd); file = rb_class_new_instance(1, &filedesc, rb_const_get(rb_cObject, rb_intern("File"))); return file; } |
.tmpfile ⇒ File
Wraps tmpfile(3)
for Ruby. See man tmpfile
on your system for exact semantics.
Notes:
-
raises a
SystemCallError
if any of the syscalls involved fail.
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'ext/stemp.c', line 114 static VALUE stemp_tmpfile(VALUE self) { VALUE filedesc, file; FILE *fp; fp = tmpfile(); if (NULL == fp) raise_systemcallerror(errno, "in tmpfile"); /* A shame to have to move back to fileno from the FILE *, but there doesn't * seem to be a clean way to do this in Ruby's C bindings otherwise. * Note that fileno() is not ANSI C, but should be present wherever mkstemp * and company are. */ filedesc = INT2FIX(fileno(fp)); file = rb_class_new_instance(1, &filedesc, rb_const_get(rb_cObject, rb_intern("File"))); return file; } |