31#if defined (HAVE_CONFIG_H)
67mk_stat_map (
const sys::base_file_stat& fs)
70 = sys::base_file_stat::have_struct_stat_st_rdev ();
71 static bool have_blksize
72 = sys::base_file_stat::have_struct_stat_st_blksize ();
73 static bool have_blocks
74 = sys::base_file_stat::have_struct_stat_st_blocks ();
76 static double nan = numeric_limits<double>::NaN ();
80 m.
assign (
"dev",
static_cast<double> (fs.dev ()));
81 m.
assign (
"ino", fs.ino ());
82 m.
assign (
"mode", fs.mode ());
83 m.
assign (
"modestr", fs.mode_as_string ());
84 m.
assign (
"nlink", fs.nlink ());
85 m.
assign (
"uid", fs.uid ());
86 m.
assign (
"gid", fs.gid ());
87 m.
assign (
"rdev", have_rdev ?
static_cast<double> (fs.rdev ()) : nan);
88 m.
assign (
"size", fs.size ());
89 m.
assign (
"atime", fs.atime ());
90 m.
assign (
"mtime", fs.mtime ());
91 m.
assign (
"ctime", fs.ctime ());
94 m.
assign (
"blksize", fs.blksize ());
99 m.
assign (
"blocks", fs.blocks ());
107mk_stat_result (
const sys::base_file_stat& fs)
126 if (args.length () != 2)
144 i_old = args(0).int_value (
true);
145 i_new = args(1).int_value (
true);
148 if (i_old < 0 || i_new < 0)
154 int status = sys::dup2 (i_old, i_new, msg);
156 return ovl (status, msg);
180 int nargin = args.length ();
182 if (nargin < 1 || nargin > 2)
185 std::string exec_file = args(0).xstring_value (
"exec: FILE must be a string");
191 string_vector tmp = args(1).xstring_vector_value (
"exec: all arguments must be strings");
197 exec_args[0] = exec_file;
199 for (
int i = 0; i <
len; i++)
200 exec_args[i+1] = tmp[i];
206 exec_args[0] = exec_file;
218 int status = sys::execvp (exec_file, exec_args, msg);
220 return ovl (status, msg);
270 int nargin = args.length ();
272 if (nargin < 1 || nargin > 3)
275 std::string exec_file = args(0).xstring_value (
"popen2: COMMAND argument must be a string");
281 string_vector tmp = args(1).xstring_vector_value (
"popen2: all arguments must be strings");
287 arg_list[0] = exec_file;
289 for (
int i = 0; i <
len; i++)
290 arg_list[i+1] = tmp[i];
296 arg_list[0] = exec_file;
299 bool sync_mode = (nargin == 3 ? args(2).bool_value () :
false);
305 pid = sys::popen2 (exec_file, arg_list, sync_mode, filedesc, msg);
308 error (
"%s", msg.c_str ());
310 FILE *ifile = fdopen (filedesc[1],
"r");
311 FILE *ofile = fdopen (filedesc[0],
"w");
447 if (args.length () != 3)
461 fid = args(0).int_value (
true);
465 error (
"fcntl: invalid file id FID");
467 int req = args(1).strict_int_value (
"fcntl: REQUEST must be an integer");
468 int arg = args(2).strict_int_value (
"fcntl: ARG must be an integer");
473 int status = sys::fcntl (fid, req, arg, msg);
478 error (
"fcntl: operation failed: %s", msg.c_str ());
483 retval =
ovl (-1.0, msg);
485 retval =
ovl (status,
"");
516 if (args.length () != 0)
519 if (interp.at_top_level ())
520 error (
"fork: cannot be called from command line");
524 pid_t pid = sys::fork (msg);
526 return ovl (pid, msg);
546 int nargin = args.length ();
550 int status = EXIT_SUCCESS;
553 status = args(0).xint_value (
"_Exit: STATUS must be an integer");
567 if (args.length () != 0)
572 pid_t pid = sys::getpgrp (msg);
574 return ovl (pid, msg);
584 if (args.length () != 0)
587 return ovl (sys::getpid ());
597 if (args.length () != 0)
600 return ovl (sys::getppid ());
610 if (args.length () != 0)
613 return ovl (sys::getegid ());
623 if (args.length () != 0)
626 return ovl (sys::getgid ());
636 if (args.length () != 0)
639 return ovl (sys::geteuid ());
649 if (args.length () != 0)
652 return ovl (sys::getuid ());
680 if (args.length () != 2)
683 pid_t pid = args(0).int_value (
true);
685 int sig = args(1).int_value (
true);
690 int status = sys::kill (pid, sig, msg);
695 error (
"kill: operation failed: %s", msg.c_str ());
700 retval =
ovl (-1.0, msg);
702 retval =
ovl (0.0,
"");
719 if (args.length () != 1)
722 std::string fname = args(0).xstring_value (
"lstat: NAME must be a string");
724 sys::file_stat fs (fname,
false);
726 return mk_stat_result (fs);
732convert (
int x,
int ibase,
int obase)
739 error (
"mkfifo: invalid digit");
743 while ((
x = (
x - tmp) / obase))
748 error (
"mkfifo: invalid digit");
750 retval += mult * tmp;
772 if (args.length () != 2)
775 std::string name = args(0).xstring_value (
"mkfifo: FILE must be a string");
777 int octal_mode = args(1).strict_int_value (
"mkfifo: MODE must be an integer");
780 error (
"mkfifo: MODE must be a positive integer value");
782 int mode = convert (octal_mode, 8, 10);
787 int status = sys::mkfifo (name, mode, msg);
792 error (
"mkfifo: operation failed: %s", msg.c_str ());
797 retval =
ovl (-1.0, msg);
799 retval =
ovl (0.0,
"");
830 if (args.length () != 0)
836 int status = sys::pipe (fid, msg);
839 return ovl (-1, -1, -1, msg);
842 FILE *ifile = fdopen (fid[0],
"r");
843 FILE *ofile = fdopen (fid[1],
"w");
951 if (args.length () != 1)
956 if (args(0).is_scalar_type ())
968 fid = args(0).int_value (
true);
972 error (
"stat: invalid file id FID");
974 sys::file_fstat fs (fid);
976 retval = mk_stat_result (fs);
980 std::string fname = args(0).xstring_value (
"stat: NAME must be a string");
982 sys::file_stat fs (fname);
984 retval = mk_stat_result (fs);
1000 if (args.length () != 1)
1003 double mode = args(0).xdouble_value (
"S_ISREG: invalid MODE value");
1005 return ovl (sys::file_stat::is_reg (
static_cast<mode_t
> (mode)));
1018 if (args.length () != 1)
1021 double mode = args(0).xdouble_value (
"S_ISDIR: invalid MODE value");
1023 return ovl (sys::file_stat::is_dir (
static_cast<mode_t
> (mode)));
1036 if (args.length () != 1)
1039 double mode = args(0).xdouble_value (
"S_ISCHR: invalid MODE value");
1041 return ovl (sys::file_stat::is_chr (
static_cast<mode_t
> (mode)));
1054 if (args.length () != 1)
1057 double mode = args(0).xdouble_value (
"S_ISBLK: invalid MODE value");
1059 return ovl (sys::file_stat::is_blk (
static_cast<mode_t
> (mode)));
1072 if (args.length () != 1)
1075 double mode = args(0).xdouble_value (
"S_ISFIFO: invalid MODE value");
1077 return ovl (sys::file_stat::is_fifo (
static_cast<mode_t
> (mode)));
1090 if (args.length () != 1)
1093 double mode = args(0).xdouble_value (
"S_ISLNK: invalid MODE value");
1095 return ovl (sys::file_stat::is_lnk (
static_cast<mode_t
> (mode)));
1108 if (args.length () != 1)
1111 double mode = args(0).xdouble_value (
"S_ISSOCK: invalid MODE value");
1113 return ovl (sys::file_stat::is_sock (
static_cast<mode_t
> (mode)));
1116DEFUN (gethostname, args, ,
1122 if (args.length () != 0)
1125 return ovl (sys::env::get_host_name ());
1153 if (args.length () != 0)
1160 m.
assign (
"sysname", sysinfo.sysname ());
1161 m.
assign (
"nodename", sysinfo.nodename ());
1162 m.
assign (
"release", sysinfo.release ());
1163 m.
assign (
"version", sysinfo.version ());
1164 m.
assign (
"machine", sysinfo.machine ());
1166 return ovl (m, sysinfo.error (), sysinfo.message ());
1190 if (args.length () != 1)
1193 std::string name = args(0).xstring_value (
"unlink: FILE must be a string");
1202 int status = sys::unlink (name, msg);
1209 error (
"unlink: operation failed: %s", msg.c_str ());
1214 retval =
ovl (-1.0, msg);
1216 retval =
ovl (0.0,
"");
1289 int nargin = args.
length ();
1291 if (nargin != 1 && nargin != 2)
1294 pid_t pid = args(0).strict_int_value (
"waitpid: OPTIONS must be an integer");
1299 options = args(1).strict_int_value (
"waitpid: PID must be an integer value");
1304 pid_t result = sys::waitpid (pid, &status, options, msg);
1306 return ovl (result, status, msg);
1318 if (args.length () != 1)
1321 int status = args(0).strict_int_value (
"WIFEXITED: STATUS must be an integer");
1323 return ovl (sys::wifexited (status));
1337 if (args.length () != 1)
1340 int status = args(0).strict_int_value (
"WEXITSTATUS: STATUS must be an integer");
1342 return ovl (sys::wexitstatus (status));
1354 if (args.length () != 1)
1357 int status = args(0).strict_int_value (
"WIFSIGNALED: STATUS must be an integer");
1359 return ovl (sys::wifsignaled (status));
1373 if (args.length () != 1)
1376 int status = args(0).strict_int_value (
"WTERMSIG: STATUS must be an integer");
1378 return ovl (sys::wtermsig (status));
1394 if (args.length () != 1)
1397 int status = args(0).strict_int_value (
"WCOREDUMP: STATUS must be an integer");
1399 return ovl (sys::wcoredump (status));
1414 if (args.length () != 1)
1417 int status = args(0).strict_int_value (
"WIFSTOPPED: STATUS must be an integer");
1419 return ovl (sys::wifstopped (status));
1433 if (args.length () != 1)
1436 int status = args(0).strict_int_value (
"WSTOPSIG: STATUS must be an integer");
1438 return ovl (sys::wstopsig (status));
1450 if (args.length () != 1)
1453 int status = args(0).strict_int_value (
"WIFCONTINUED: STATUS must be an integer");
1455 return ovl (sys::wifcontinued (status));
1469 if (args.length () != 1)
1472 std::string name = args(0).xstring_value (
"canonicalize_file_name: NAME must be a string");
1476 std::string result = sys::canonicalize_file_name (name, msg);
1478 return ovl (result, msg.empty () ? 0 : -1, msg);
1503 return const_value (args, val);
1519 return const_value (args, val);
1535 return const_value (args, val);
1551 return const_value (args, val);
1567 return const_value (args, val);
1587 return const_value (args, val);
1606 return const_value (args, val);
1626 return const_value (args, val);
1645 return const_value (args, val);
1665 return const_value (args, val);
1684 return const_value (args, val);
1704 return const_value (args, val);
1723 return const_value (args, val);
1743 return const_value (args, val);
1762 return const_value (args, val);
1776 return const_value (args, sys::wnohang ());
1790 return const_value (args, sys::wuntraced ());
1804 return const_value (args, sys::wcontinue ());
1807OCTAVE_END_NAMESPACE(octave)
void octave__Exit_wrapper(int status)
static bool ignoring_entries()
static void clean_up_and_save(const std::string &="", int=-1)
Provides threadsafe access to octave.
void file_renamed(bool load_new)
void file_remove(const std::string &old_name, const std::string &new_name)
void assign(const std::string &k, const octave_value &val)
octave_idx_type length() const
static stream create(const std::string &n, FILE *f=nullptr, std::ios::openmode m=std::ios::in|std::ios::out, mach_info::float_format ff=mach_info::native_float_format(), const std::string &encoding="utf-8", c_file_ptr_buf::close_fcn cf=c_file_ptr_buf::file_close)
int get_file_number(const octave_value &fid) const
stream lookup(int fid, const std::string &who="") const
void resize(octave_idx_type n, const std::string &rfv="")
octave_idx_type numel() const
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
#define DEFUN(name, args_name, nargout_name, doc)
Macro to define a builtin function.
#define DEFUNX(name, fname, args_name, nargout_name, doc)
Macro to define a builtin function with certain internal name.
#define DEFMETHODX(name, fname, interp_name, args_name, nargout_name, doc)
Macro to define a builtin method with certain internal name.
void error(const char *fmt,...)
void err_disabled_feature(const std::string &fcn, const std::string &feature, const std::string &pkg)
int octave_o_trunc_wrapper(void)
int octave_f_dupfd_wrapper(void)
int octave_o_wronly_wrapper(void)
int octave_o_creat_wrapper(void)
int octave_o_append_wrapper(void)
int octave_o_sync_wrapper(void)
int octave_o_nonblock_wrapper(void)
int octave_o_excl_wrapper(void)
int octave_f_getfd_wrapper(void)
int octave_o_rdonly_wrapper(void)
int octave_f_setfd_wrapper(void)
int octave_o_rdwr_wrapper(void)
int octave_f_setfl_wrapper(void)
int octave_o_async_wrapper(void)
int octave_f_getfl_wrapper(void)
octave_value_list ovl(const OV_Args &... args)
Construct an octave_value_list with less typing.
F77_RET_T const F77_DBLE * x
octave_value_list FF_SETFL(const octave_value_list &args, int)
octave_value_list Fwaitpid(const octave_value_list &args, int)
octave_value_list Fdup2(octave::interpreter &interp, const octave_value_list &args, int)
octave_value_list Fgetuid(const octave_value_list &args, int)
octave_value_list FWCONTINUE(const octave_value_list &args, int)
octave_value_list FO_RDWR(const octave_value_list &args, int)
octave_value_list FS_ISREG(const octave_value_list &args, int)
octave_value_list FF_GETFD(const octave_value_list &args, int)
octave_value_list FS_ISSOCK(const octave_value_list &args, int)
octave_value_list Fpopen2(octave::interpreter &interp, const octave_value_list &args, int)
octave_value_list FWIFSIGNALED(const octave_value_list &args, int)
octave_value_list FO_RDONLY(const octave_value_list &args, int)
octave_value_list F_Exit(const octave_value_list &args, int)
octave_value_list FO_WRONLY(const octave_value_list &args, int)
octave_value_list FO_NONBLOCK(const octave_value_list &args, int)
octave_value_list FWIFCONTINUED(const octave_value_list &args, int)
octave_value_list Fgetegid(const octave_value_list &args, int)
octave_value_list FF_DUPFD(const octave_value_list &args, int)
octave_value_list FWIFEXITED(const octave_value_list &args, int)
octave_value_list FS_ISCHR(const octave_value_list &args, int)
octave_value_list Funlink(octave::interpreter &interp, const octave_value_list &args, int nargout)
octave_value_list FO_TRUNC(const octave_value_list &args, int)
octave_value_list Fgetppid(const octave_value_list &args, int)
octave_value_list Fgetgid(const octave_value_list &args, int)
octave_value_list Fgeteuid(const octave_value_list &args, int)
octave_value_list Fmkfifo(const octave_value_list &args, int nargout)
octave_value_list FWCOREDUMP(const octave_value_list &args, int)
octave_value_list FF_SETFD(const octave_value_list &args, int)
octave_value_list Flstat(const octave_value_list &args, int)
octave_value_list FS_ISFIFO(const octave_value_list &args, int)
octave_value_list FS_ISBLK(const octave_value_list &args, int)
octave_value_list FWSTOPSIG(const octave_value_list &args, int)
octave_value_list FWUNTRACED(const octave_value_list &args, int)
octave_value_list Fgetpgrp(const octave_value_list &args, int)
octave_value_list Fkill(const octave_value_list &args, int nargout)
octave_value_list FWTERMSIG(const octave_value_list &args, int)
octave_value_list FWNOHANG(const octave_value_list &args, int)
octave_value_list FO_CREAT(const octave_value_list &args, int)
octave_value_list Fcanonicalize_file_name(const octave_value_list &args, int)
octave_value_list FO_ASYNC(const octave_value_list &args, int)
octave_value_list FWIFSTOPPED(const octave_value_list &args, int)
octave_value_list Ffcntl(octave::interpreter &interp, const octave_value_list &args, int nargout)
octave_value_list FO_APPEND(const octave_value_list &args, int)
octave_value_list FO_SYNC(const octave_value_list &args, int)
octave_value_list FF_GETFL(const octave_value_list &args, int)
octave_value_list Fpipe(octave::interpreter &interp, const octave_value_list &args, int)
octave_value_list FS_ISLNK(const octave_value_list &args, int)
octave_value_list Ffork(octave::interpreter &interp, const octave_value_list &args, int)
octave_value_list Fstat(octave::interpreter &interp, const octave_value_list &args, int)
octave_value_list FS_ISDIR(const octave_value_list &args, int)
octave_value_list Fgetpid(const octave_value_list &args, int)
octave_value_list Fexec(octave::interpreter &interp, const octave_value_list &args, int)
octave_value_list FWEXITSTATUS(const octave_value_list &args, int)
octave_value_list FO_EXCL(const octave_value_list &args, int)