Using System Calls Unix - PowerPoint PPT Presentation

1 / 16
About This Presentation
Title:

Using System Calls Unix

Description:

argv points to an array with three elements, each of which is a pointer to a ... program is always contained in element 0 of argv. Exec Family of System Calls ... – PowerPoint PPT presentation

Number of Views:61
Avg rating:3.0/5.0
Slides: 17
Provided by: marily242
Category:
Tags: argv | calls | system | unix | using

less

Transcript and Presenter's Notes

Title: Using System Calls Unix


1
Using 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

2
Recall 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.
4
Example ./a.out 1 4
5
The 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)
6
Exec 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/)

7
exec 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.

8
main (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
9
Program a.out will begin to execute and will have
the following parameters to main argc
3. argv0 ./a.out argv1 2
10
Process 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.

11
Very Simple Shell
  • while(1)
  • type_prompt()
  • read_command(command, parameters)
  • if (fork() ! 0) //I am the parent
  • wait()
  • else
  • execv(command, parameters)
  • printf(OOOPPPSSS\)

12
File 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)

13
File 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)

14
File 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

15
Reading 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.

16
char x, buf, buf1 buf (char ) malloc(1024)
buf1 (char ) malloc(1024) scanf(s,
buf) scanf(s, buf1)
Write a Comment
User Comments (0)
About PowerShow.com