DOC PREVIEW
U of I CS 241 - System Calls and I/O

This preview shows page 1-2-3-4 out of 12 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 12 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 12 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 12 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 12 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 12 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

Copyright ©: Nahrstedt, Angrave, Abdelzaher 1 Tarek Abdelzaher Vikram Adve CS241 Systems Programming System Calls and I/O Copyright ©: Nahrstedt, Angrave, Abdelzaher 2 This lecture !! Goals: !! Get you familiar with necessary basic system & I/O calls to do programming !! Things covered in this lecture !! Basic file system calls !! I/O calls !! Signals !! Note: we will come back later to discuss the above things at the concept levelCopyright ©: Nahrstedt, Angrave, Abdelzaher 3 System Calls versus Function Calls? Copyright ©: Nahrstedt, Angrave, Abdelzaher 4 System Calls versus Function Calls fnCall() Process Caller and callee are in the same Process - Same user - Same “domain of trust” Function CallCopyright ©: Nahrstedt, Angrave, Abdelzaher 5 System Calls versus Function Calls fnCall() Process Caller and callee are in the same Process - Same user - Same “domain of trust” Function Call sysCall() Process System Call OS - OS is trusted; user is not. -! OS has super-privileges; user does not -! Must take measures to prevent abuse Copyright ©: Nahrstedt, Angrave, Abdelzaher 6 System Calls !! System Calls !! A request to the operating system to perform some activity !! System calls are expensive !! The system needs to perform many things before executing a system call !! The computer (hardware) saves its state !! The OS code takes control of the CPU, privileges are updated. !! The OS examines the call parameters !! The OS performs the requested function !! The OS saves its state (and call results) !! The OS returns control of the CPU to the callerCopyright ©: Nahrstedt, Angrave, Abdelzaher 7 Steps for Making a System Call (Example: read call) Copyright ©: Nahrstedt, Angrave, Abdelzaher 8 Examples of System Calls !! Example: !! getuid() //get the user ID !! fork() //create a child process !! exec() //executing a program !! Don’t confuse system calls with libc calls !! Differences? !! Is printf() a system call? !! Is rand() a system call?System calls vs. libc System calls Library calls open fopen close fclose read fread, getchar, scanf, fscanf, getc, fgetc, gets, fgets write fwrite, putchar, printf, fprintf putc, fputc, puts, fputs lseek fseek Copyright ©: Nahrstedt, Angrave, Abdelzaher 9 Use man –s 2 Use man –s 3 Each I/O system call has corresponding procedure calls from the standard I/O library. Copyright ©: Nahrstedt, Angrave, Abdelzaher 10 File System and I/O Related System Calls !! A file system: A hierarchical arrangement of directories. !! In Unix, the root file system starts with "/“Copyright ©: Nahrstedt, Angrave, Abdelzaher 11 Why does the OS control I/O? "! Safety !! The computer must ensure that if my program has a bug in it, then it doesn't crash or mess up !! the system, !! other programs that may run at the same time or later. "! Fairness !! Make sure other programs have a fair use of device Copyright ©: Nahrstedt, Angrave, Abdelzaher 12 System Calls for I/O !! There are 5 basic system calls that Unix provides for file I/O !! int open(char *path, int flags [ , int mode ] ); (check man –s 2 open) !! int close(int fd); !! int read(int fd, char *buf, int size); !! int write(int fd, char *buf, int size); !! off_t lseek(int fd, off_t offset, int whence); !! Remember: these are different from regular procedure calls !! Some library calls themselves make a system call !! (e.g. fopen() calls open())Copyright ©: Nahrstedt, Angrave, Abdelzaher 13 Open !! int open(char *path, int flags [ , int mode ] ) makes a request to the operating system to use a file. !! The 'path' argument specifies the file you would like to use !! The 'flags' and 'mode' arguments specify how you would like to use it. !! If the operating system approves your request, it will return a file descriptor to you. This is a non-negative integer. Any future accesses to this file needs to provide this file descriptor !! If it returns -1, then you have been denied access; check the value of global variable "errno" to determine why (or use perror() to print corresponding error message). Copyright ©: Nahrstedt, Angrave, Abdelzaher 14 Standard Input, Output and Error !! Now, every process in Unix starts out with three file descriptors predefined: !! File descriptor 0 is standard input. !! File descriptor 1 is standard output. !! File descriptor 2 is standard error. !! You can read from standard input, using read(0, ...), and write to standard output using write(1, ...) or using two library calls !! printf !! scanfCopyright ©: Nahrstedt, Angrave, Abdelzaher 15 Example 1 #include <fcntl.h> #include <errno.h> main(int argc, char** argv) { int fd; fd = open("foo.txt", O_RDONLY); printf("%d\n", fd); if (fd=-1) { fprintf (stderr, "Error Number %d\n", errno); perror("Program"); } } Copyright ©: Nahrstedt, Angrave, Abdelzaher 16 Example 1 #include <fcntl.h> #include <errno.h> extern int errno; main() { int fd; fd = open("foo.txt", O_RDONLY); printf("%d\n", fd); if (fd==-1) { printf ("Error Number %d\n", errno); perror("Program"); } } How to modify the example to print the program name before the error message?Copyright ©: Nahrstedt, Angrave, Abdelzaher 17 Close !! int close(int fd) Tells the operating system you are done with a file descriptor. #include <fcntl.h> main(){ int fd1, fd2; if(( fd1 = open(“foo.txt", O_RDONLY)) < 0){ perror(”foo.txt"); exit(1); } if (close(fd1) < 0) { perror(”foo.txt"); exit(1); } printf("closed the fd's\n"); After close, can you still use the file descriptor? Why do we need to close a file? Copyright ©: Nahrstedt, Angrave, Abdelzaher 18 read(…) !! int read(int fd, char *buf, int size) tells the operating system !! To read "size" bytes from the file specified by "fd“ into the memory location pointed to by "buf". !! It returns how many bytes were actually read (why?) !! 0 : at end of the file !! < size : fewer bytes are read to the buffer (why?) !! == size : read the specified # of bytes !! Things to be careful about !! buf must point to valid memory not smaller than the specified size !! Otherwise, what could happen? !! fd should be a valid file descriptor returned from open() to perform read operation !! Otherwise, what could happen?Copyright ©: Nahrstedt, Angrave, Abdelzaher 19 Example 2 #include <fcntl.h> main(int argc, char** argv) { char *c; int fd, sz; c = (char *) malloc(100 * sizeof(char)); fd = open(“foo.txt",


View Full Document

U of I CS 241 - System Calls and I/O

Documents in this Course
Process

Process

28 pages

Files

Files

37 pages

File I/O

File I/O

52 pages

C Basics

C Basics

69 pages

Memory

Memory

23 pages

Threads

Threads

14 pages

Lecture

Lecture

55 pages

C Basics

C Basics

24 pages

Signals

Signals

27 pages

Memory

Memory

45 pages

Threads

Threads

47 pages

Threads

Threads

28 pages

LECTURE

LECTURE

45 pages

Threads

Threads

30 pages

Threads

Threads

55 pages

Files

Files

37 pages

SIGNALS

SIGNALS

22 pages

Files

Files

37 pages

Threads

Threads

14 pages

Threads

Threads

13 pages

Load more
Download System Calls and I/O
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view System Calls and I/O and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view System Calls and I/O 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?