зеркало из https://github.com/github/ruby.git
file.c: File.mkfifo
* file.c (rb_file_s_mkfifo): implement File.mkfifo. [Feature #11536] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
30f9177d5d
Коммит
9289515562
|
@ -1,3 +1,8 @@
|
|||
Fri Sep 18 20:11:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* file.c (rb_file_s_mkfifo): implement File.mkfifo.
|
||||
[Feature #11536]
|
||||
|
||||
Fri Sep 18 16:56:19 2015 Shugo Maeda <shugo@ruby-lang.org>
|
||||
|
||||
* NEWS: add Net::FTP#mlst and Net::FTP#mlsd.
|
||||
|
|
4
NEWS
4
NEWS
|
@ -30,6 +30,10 @@ with all sufficient information, see the ChangeLog file.
|
|||
[Feature #11049]
|
||||
* Enumerable#chunk_while [Feature #10769]
|
||||
|
||||
* File
|
||||
|
||||
* File.mkfifo [Feature #11536]
|
||||
|
||||
* Hash
|
||||
|
||||
* Hash#fetch_values [Feature #10017]
|
||||
|
|
|
@ -2182,6 +2182,8 @@ AC_CHECK_FUNCS(memalign)
|
|||
AC_CHECK_FUNCS(writev)
|
||||
AC_CHECK_FUNCS(memrchr)
|
||||
AC_CHECK_FUNCS(memmem)
|
||||
AC_CHECK_FUNCS(mkfifo)
|
||||
AC_CHECK_FUNCS(mknod)
|
||||
AC_CHECK_FUNCS(mktime)
|
||||
AC_CHECK_FUNCS(pipe2)
|
||||
AC_CHECK_FUNCS(poll)
|
||||
|
|
39
file.c
39
file.c
|
@ -5508,6 +5508,44 @@ rb_stat_sticky(VALUE obj)
|
|||
return Qfalse;
|
||||
}
|
||||
|
||||
#if !defined HAVE_MKFIFO && defined HAVE_MKNOD && defined S_IFIFO
|
||||
#define mkfifo(path, mode) mknod(path, (mode)&~S_IFMT|S_IFIFO, 0)
|
||||
#define HAVE_MKFIFO
|
||||
#endif
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* File.mkfifo(file_name, mode) => 0
|
||||
*
|
||||
* Creates a FIFO special file with name _file_name_. _mode_
|
||||
* specifies the FIFO's permissions. It is modified by the process's
|
||||
* umask in the usual way: the permissions of the created file are
|
||||
* (mode & ~umask).
|
||||
*/
|
||||
|
||||
#ifdef HAVE_MKFIFO
|
||||
static VALUE
|
||||
rb_file_s_mkfifo(int argc, VALUE *argv)
|
||||
{
|
||||
VALUE path;
|
||||
int mode = 0666;
|
||||
|
||||
rb_check_arity(argc, 1, 2);
|
||||
if (argc > 1) {
|
||||
mode = NUM2INT(argv[1]);
|
||||
}
|
||||
path = argv[0];
|
||||
FilePathValue(path);
|
||||
path = rb_str_encode_ospath(path);
|
||||
if (mkfifo(RSTRING_PTR(path), mode)) {
|
||||
rb_sys_fail_path(path);
|
||||
}
|
||||
return INT2FIX(0);
|
||||
}
|
||||
#else
|
||||
#define rb_file_s_mkfifo rb_f_notimplement
|
||||
#endif
|
||||
|
||||
VALUE rb_mFConst;
|
||||
|
||||
void
|
||||
|
@ -5917,6 +5955,7 @@ Init_File(void)
|
|||
rb_define_singleton_method(rb_cFile, "rename", rb_file_s_rename, 2);
|
||||
rb_define_singleton_method(rb_cFile, "umask", rb_file_s_umask, -1);
|
||||
rb_define_singleton_method(rb_cFile, "truncate", rb_file_s_truncate, 2);
|
||||
rb_define_singleton_method(rb_cFile, "mkfifo", rb_file_s_mkfifo, -1);
|
||||
rb_define_singleton_method(rb_cFile, "expand_path", rb_file_s_expand_path, -1);
|
||||
rb_define_singleton_method(rb_cFile, "absolute_path", rb_file_s_absolute_path, -1);
|
||||
rb_define_singleton_method(rb_cFile, "realpath", rb_file_s_realpath, -1);
|
||||
|
|
|
@ -4,10 +4,9 @@ require "timeout"
|
|||
require_relative "find_executable"
|
||||
|
||||
def File.mkfifo(fn)
|
||||
raise NotImplementedError, "does not support fifo" if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM
|
||||
ret = system("mkfifo", fn)
|
||||
raise NotImplementedError, "mkfifo fails" if !ret
|
||||
end
|
||||
end unless File.respond_to?(:mkfifo) or /mswin|mingw|bccwin/ =~ RUBY_PLATFORM
|
||||
|
||||
module EnvUtil
|
||||
def rubybin
|
||||
|
|
Загрузка…
Ссылка в новой задаче