Module: Getargv
- Defined in:
- lib/getargv_ruby.rb,
lib/getargv_ruby/version.rb,
ext/getargv_ruby/getargv_ruby.c
Overview
This gem allows you to get the arguments of another process on macOS using a correct parsing algorithm.
Constant Summary collapse
- VERSION =
The version of the gem
"0.3.11"
Class Method Summary collapse
-
.get_argv_and_argc_of_pid(rPid, enc) ⇒ Object
Returns the arguments for the given process id as an array of strings with the specified encoding.
-
.get_argv_of_pid(*args) ⇒ Object
Returns the arguments for the given process id as a string with the specified encoding.
Class Method Details
.get_argv_and_argc_of_pid(pid, enc) ⇒ Array .get_argv_of_pid_as_array(pid, enc) ⇒ Array
Returns the arguments for the given process id as an array of strings with the specified encoding.
Getargv::get_argv_of_pid_as_array is an alias for Getargv::get_argv_and_argc_of_pid.
Examples:
Getargv.get_argv_and_argc_of_pid(Process.pid, Encoding.default_external) #=> ["ruby,"-e",...]
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'ext/getargv_ruby/getargv_ruby.c', line 72 static VALUE ruby_get_argv_and_argc_of_pid(VALUE self, VALUE rPid, VALUE enc) { Check_Type(rPid, T_FIXNUM); rb_pid_t pid = NUM2PIDT(rPid); rb_encoding *encoding = rb_to_encoding(enc); struct ArgvArgcResult result; if (!get_argv_and_argc_of_pid(pid, &result)) { rb_sys_fail(0); // uses errno } VALUE ary = rb_ary_new_capa(result.argc); for (size_t i = 0; i < result.argc; i++) { // assemble result ruby string, this copies :( rb_ary_push(ary, rb_enc_str_new_cstr(result.argv[i], encoding)); } // ruby copied data, can free buffers now free_ArgvArgcResult(&result); return ary; } |
.get_argv_of_pid(pid, enc) ⇒ String .get_argv_of_pid_as_string(pid, enc) ⇒ String .get_argv_of_pid(pid, enc, nuls) ⇒ String .get_argv_of_pid_as_string(pid, enc, nuls) ⇒ String .get_argv_of_pid(pid, enc, nuls, skip) ⇒ String .get_argv_of_pid_as_string(pid, enc, nuls, skip) ⇒ String
Returns the arguments for the given process id as a string with the specified encoding. If the third arg is true: replace nul separators with space for human consumption. If the fourth arg is provided, skip ahead the returned string by the given number of leading arguments.
Getargv::get_argv_of_pid_as_string is an alias for Getargv::get_argv_of_pid.
Examples:
Getargv.get_argv_of_pid(Process.pid, Encoding.default_external) #=> "ruby\x00-e..."
Getargv.get_argv_of_pid(Process.pid, Encoding.default_external, true) #=> "ruby -e..."
Getargv.get_argv_of_pid(Process.pid, Encoding.default_external, false, 1) #=> "-e..."
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'ext/getargv_ruby/getargv_ruby.c', line 29 static VALUE ruby_get_argv_of_pid(int argc, const VALUE *argv, VALUE self) { rb_check_arity(argc, 2, 4); Check_Type(argv[0], T_FIXNUM); rb_pid_t pid = NUM2PIDT(argv[0]); bool nuls = false; uint skip = 0; rb_encoding *encoding = rb_to_encoding(argv[1]); if (argc > 2) nuls = RB_TEST(argv[2]); if (argc > 3 && !NIL_P(argv[3])) { Check_Type(argv[3], T_FIXNUM); skip = NUM2UINT(argv[3]); } struct GetArgvOptions = {.pid = pid, .skip = skip, .nuls = nuls}; struct ArgvResult result; if (!get_argv_of_pid(&, &result)) { rb_sys_fail(0); // uses errno } // assemble result ruby string, this copies :( VALUE retVal = rb_enc_str_new(result.start_pointer, 1 + result.end_pointer - result.start_pointer, encoding); free_ArgvResult(&result); // ruby copied data, can free buffer now return retVal; } |