From: Ken Bloom Date: 2007-12-14T00:25:04+09:00 Subject: Re: system(), syscall(), and Shells On Wed, 12 Dec 2007 18:21:51 -0500, thefed wrote: > Hello all > > I have a rather quick question. > > As a part of the ruby unix team, we need to be able to execute commands. > One way to do this is through system. The other way is through syscall. > > First: does a call of system() open up a new process in the current > shell or does it make a system call? I tested this out with this > command: > > system('cat csh.cshrc | wc') and got back a legitimate response. I'm > assuming, since I used pipelines, that this gets opened in a new shell. > I am asking here just to be safe. > > Second: How exactly do I use syscall() in Ruby? Partically using syscall > for the exec command. I could get write to work, but not exec. Help? > > I have researched using syscall, and have only found documentation for > using it in C. C != Ruby # => true Syscall in ruby works exactly like it does in C. Ruby (ri Kernel#syscall) Calls the operating system function identified by _fixnum_, passing in the arguments, which must be either +String+ objects, or +Integer+ objects that ultimately fit within a native +long+. Up to nine parameters may be passed (14 on the Atari-ST). The function identified by _fixnum_ is system dependent. On some Unix systems, the numbers may be obtained from a header file called +syscall.h+. C (man 2 syscall) syscall() performs the system call whose assembly language interface has the specified number with the specified arguments. Symbolic constants for system calls can be found in the header file . --Ken -- Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory. Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/