Title: Using System Calls Unix
1Using System Calls (Unix)
- Have to tell compiler (if C/C) where to find
the headers, etc. i.e., the include files - May have to tell compiler where the library
itself lives - Use Unix man pages to tell you about this for
each system call - Other resources
2Recall Parameters to main in C. main(int argc,
char argv) //also char envp
.. argc Number of command line
parameters (always at least 1). argv Array of
pointers to command line parameters. Each
parameter is a null terminated string.
3 Example ./a.out 1 4 main(int argc, char
argv) .. argc 3
argv points to an array with three elements, each
of which is a pointer to a null terminated
string.
4Example ./a.out 1 4
5The name of the program is always contained in
element 0 of argv.
Ex Want to print out name of program
(inefficiently) char ptr ptr argv0
while (ptr ! \0) printf(c, ptr)
6Exec Family of System Calls
- Used to begin a processes execution.
-
- Overwrites process (core) image of the calling
process with that of called program. - Several flavors, use the one most suited to
needs. - int execv( char path, char argvec)
- int execl(const char path, const char arg0,
..., const char argn, char - / NULL/)
7exec Function calls
- int execv( char path, char argvec)
- pathname Can be an executable program in your
directory (application code) or a system program
such as ls, cd, date, .. - argvec Array of pointers to NULL terminated
strings. - First element should always be the name of
the - program, last element should always be NULL.
8main (int argc, argv) int my_pid
char args3 my_pid fork() if
(my_pid 0) args0 ./a.out All
executed by args1 2 child process
args2 NULL execv(./a.out, args)
printf(OOOpppssss.\n) else printf(Not
a problem!\n) Executed by parent
9Program a.out will begin to execute and will have
the following parameters to main argc
3. argv0 ./a.out argv1 2
10Process Management System Calls
- wait() Blocks parent process until all child
processes have terminated - wait(pid) Blocks until a particular child process
terminates. - Exit() Terminate the process and de-allocate its
resources.
11Very Simple Shell
- while(1)
- type_prompt()
- read_command(command, parameters)
- if (fork() ! 0) //I am the parent
- wait()
- else
- execv(command, parameters)
- printf(OOOPPPSSS\)
-
-
12File Management System Calls
- int fd open(name, how, mode)
- name is pathname
- Mode is file permissions.
- how is an integer whose bits tell the system
call how to open the file - O_RDONLY read only (0)
- O_WRONLY write only (1)
- O_RDWR read and write (2)
- int s close(fd)
13File Management System Calls
- int n read(int fd, void buffer, int nbytes)
- fd file descriptor
- buffer destination
- nbytes how many bytes to read
- n number read, or 0 on EOF
- file position is incremented
- int n write(int fd, void buffer, int
- nbytes)
14File Management System Calls
- pos lseek(fd,offset,whence)
- offset and pos are of type off_t (on
Solaris), which is really a long integer - whence determines what offset means
- SEEK_SET file position is set to offset bytes
- SEEK_CUR file position is set to current
position offset - SEEK_END file position is set to end of file
offset - pos new file position
15Reading from stdin
- scanf (char , var) reads from the terminal
according to format string (spaces ignored). - Example
- int j, k
- scanf(d, j) read first arg, store as int.
- scanf(d, k) // read second arg, store as
int.
16char x, buf, buf1 buf (char ) malloc(1024)
buf1 (char ) malloc(1024) scanf(s,
buf) scanf(s, buf1)