1 System Calls & Stdio. 2 Two processes open the same file Both keep writing to it What happens?

Slides:



Advertisements
Similar presentations
File Management in C. What is a File? A file is a collection of related data that a computers treats as a single unit. Computers store files to secondary.
Advertisements

File Management in C. A file is a collection of related data that a computers treats as a single unit. File is a collection of data stored permanently.
Files in C Rohit Khokher. Files in C Real life situations involve large volume of data and in such cases, the console oriented I/O operations pose two.
January 13, Csci 2111: Data and File Structures Week1, Lecture 2 Basic File Processing Operations.
CS 241 Section Week #5 2/23/12. 2 Topics This Section MP4 overview Function Pointers Pthreads File I/O.
Today’s topic: –File operations –I/O redirection –Inter-process communication through pipes.
File AccessCS-2301, B-Term File Access CS-2301, System Programming for Non-Majors (Slides include materials from The C Programming Language, 2 nd.
CS 311 – Lecture 09 Outline Introduction to Systems programming – System calls – Categories of system calls Error Management System calls File Handling.
Files. System Calls for File System Accessing files –Open, read, write, lseek, close Creating files –Create, mknod.
1 System Calls, Stdio, and Course Wrap-Up COS 217 Professor Jennifer Rexford.
1 System Calls and Standard I/O Professor Jennifer Rexford
CSE 451 Section 4 Project 2 Design Considerations.
Chapter 8: I/O Streams and Data Files. In this chapter, you will learn about: – I/O file stream objects and functions – Reading and writing character-based.
Today’s topic: –File operations –I/O redirection –Inter-process communication through pipes.
Console and File I/O - Basics Rudra Dutta CSC Spring 2007, Section 001.
POSIX: Files Introduction to Operating Systems: Discussion 1 Read Solaris System Interface Guide: Ch. 5.1 Basic File I/O.
Adv. UNIX: lowIO/161 Advanced UNIX v Objectives –look at low-level operations for handling files Special Topics in Comp. Eng. 2 Semester.
Binary Search Tree For a node: The left subtree contains nodes with keys less than the node's key. The right subtree contains nodes with keys greater than.
RjpSystem Level Programming Operating Systems 1 Having fun withy the Unix Operating System Praxis Week 7 Rob Pooley.
1 Homework Introduction to HW7 –Complexity similar to HW6 –Don’t wait until last minute to start on it File Access will be needed in HW8.
CP104 Introduction to Programming File I/O Lecture 33 __ 1 File Input/Output Text file and binary files File Input/output File input / output functions.
Recitation 9: Error Handling, I/O, Man Andrew Faulring Section A 4 November 2002.
CS252: Systems Programming Ninghui Li Based on Slides by Prof. Gustavo Rodriguez-Rivera Topic 8: Opening Files and Starting Processes.
File Handling In C By - AJAY SHARMA. We will learn about- FFile/Stream TText vs Binary Files FFILE Structure DDisk I/O function OOperations.
CS162B: Pipes Jacob T. Chan. Pipes  These allow output of one process to be the input of another process  One of the oldest and most basic forms of.
 2007 Pearson Education, Inc. All rights reserved C File Processing.
UNIX Files File organization and a few primitives.
File IO and command line input CSE 2451 Rong Shi.
1 COMP 2130 Introduction to Computer Systems Computing Science Thompson Rivers University.
Chapter 11: Data Files and File Processing Files and streams Creating a sequential access file Reading data from a sequential access file Using fgetc()
Chapter 7 : File Processing1 File-Oriented Input & Output CHAPTER 7.
1 CHAPTER6 CHAPTER 6. Objectives: You’ll learn about;  Introduction  Files and streams  Creating a sequential access file  Reading data from a sequential.
CSCI 330 UNIX and Network Programming Unit VII: I/O Management I.
File Systems cs550 Operating Systems David Monismith.
GAME203 – C Files stdio.h C standard Input/Output “getchar()”
Recitation 9: Error Handling, I/O, Man Anubhav Gupta Section D.
CSE333 SECTION 3. Important Dates Jan 27 th – Homework 1 Due Feb 6 th – Midterm.
January 7, 2003Serguei Mokhov, 1 File I/O System Calls Reference COMP 229, 444, 5201 Revision 1.2 Date: July 21, 2004.
Copyright ©: Nahrstedt, Angrave, Abdelzaher1 Tarek Abdelzaher Vikram Adve CS241 Systems Programming System Calls and I/O.
File I/O open close lseek read and write – unbuffered I/O dup and dup2.
Recitation 9: 11/04/02 Outline Error Handling I/O Linux man pages Annie Luo Office Hours: Thursday 6:00 – 7:00 Wean 8402.
I/O Software CS 537 – Introduction to Operating Systems.
OS interface: file and I/O system calls File operations in C/C++? –fopen(), fread(), fwrite(), fclose(), fseek() in C f.open(…), f.close(…) in C++ I/O.
Files A collection of related data treated as a unit. Two types Text
CS 241 Section Week #5 9/22/11. 2 Topics This Section File I/O Advanced C.
Files. FILE * u In C, we use a FILE * data type to access files. u FILE * is defined in /usr/include/stdio.h u An example: #include int main() { FILE.
Advanced Programming in the UNIX Environment Hop Lee.
1 COMP 3500 Introduction to Operating Systems Project 4 – Processes and System Calls Overview Dr. Xiao Qin Auburn University
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.
Real Numbers Device driver process within the operating system that interacts with I/O controller logical record 1 logical record 2 logical record 3.
Files in UNIX u UNIX deals with two different classes of files:  Special Files  Regular Files u Regular files are just ordinary data files on disk -
Error handling I/O Man pages
Chapter 22 – part a Stream refer to any source of input or any destination for output. Many small programs, obtain all their input from one stream usually.
Lecture 11 File input/output
CSC215 Lecture Input and Output.
CS111 Computer Programming
Files I/O, Streams, I/O Redirection, Reading with fscanf
CSE 333 – Section 3 POSIX I/O Functions.
FILE HANDLING IN C.
Text and Binary File Processing
File Input and Output.
I/O and Process Management
Accessing Files in C Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition,
Advanced UNIX progamming
CSE 333 – Section 3 POSIX I/O Functions.
Module 12 Input and Output
Standard I/O Library Implementation
File I/O & UNIX System Interface
CSc 352 File I/O Saumya Debray Dept. of Computer Science
Professor Jodi Neely-Ritz University of Florida
Presentation transcript:

1 System Calls & Stdio

2 Two processes open the same file Both keep writing to it What happens?

3 Goals of Today’s Class System calls  How a user process contacts the Operating System  For advanced services that may require special privilege Standard I/O library  Generic I/O support for C programs  A smart wrapper around I/O-related system calls  Stream concept, line-by-line input, formatted output,... Course wrap-up  Timeline for reading and exam period  Main themes of the course

4 System Calls

5 Communicating With the OS Processor modes  User mode: can execute normal instructions and access only user memory  Supervisor mode: can also execute privileged instructions & access all memory (e.g., devices) User Process Operating System signalssystems calls

6 Main Categories of System Calls File system  Low-level file I/O  E.g., creat, open, read, write, lseek, close Multi-tasking mechanisms  Process control  E.g., fork, wait, exec, exit, signal, kill Inter-process communication  E.g., pipe, dup, dup2 Unix has a few hundred system calls  See “man 2 intro” or /usr/include/syscall.h

7 System Calls Method for user process to invoke OS services Called just like a function  Essentially a “protected” function call  That transfers control to the OS and back File System Stdio Library Appl Prog creat, open, close, read, write, lseek fopen, fclose, printf, fgetc, getchar,… user OS

8 Implementing a System Call System calls are often implemented using traps  OS gains control through trap  Switches to supervisor mode  Performs the service  Switches back to user mode  Gives control back to user movl $1, %eax int $0x80 Which call? 1: exit 2: fork 3: read 4: write 5: open 6: close … Trap to the OS System-call specific arguments are put in registers

9 Main UNIX System Calls for Files Creat: int creat(char *pathname, mode_t mode);  Create a new file and assign a file descriptor Open: int open(char *pathname, int flags, mode_t mode);  Open the file pathname and return a file descriptor Close: int close(int fd);  Close a file descriptor fd Read: int read(int fd, void *buf, int count);  Read up to count bytes from fd, into the buffer at buf Write: int write(int fd, void *buf, int count);  Writes up to count bytes into fd, from the buffer at buf Lseek: int lseek(int fd, int offset, int whence);  Assigns the file pointer to a new value by applying an offset

10 Example: UNIX open() System Call Converts a path name into a file descriptor  int open(const char *pathname, int flags, mode_t mode); Arguments  Pathname: name of the file  Flags: bit flags for O_RDONLY, O_WRONLY, O_RDWR  Mode: permissions to set if file must be created Returns  Integer file descriptor (or a -1 if an error) Performs a variety of checks  E.g., whether the process is entitled to access the file

11 Example: UNIX read() System Call Converts a path name into a file descriptor  int read(int fd, void *buf, int count); Arguments  File descriptor: integer descriptor returned by open()  Buffer: pointer to memory to store the bytes it reads  Count: maximum number of bytes to read Returns  Number of bytes read –Value of 0 if nothing more to read –Value of -1 if an error Performs a variety of checks  Whether file has been opened, whether reading is okay

12 Standard I/O Library

13 Standard I/O Library Portability  Generic I/O support for C programs  Specific implementations for various host OSes  Invokes the OS-specific system calls for I/O Abstractions for C programs  Streams  Line-by-line input  Formatted output Additional optimizations  Buffered I/O  Safe writing File System Stdio Library Appl Prog user OS

14 Layers of Abstraction Disk Driver Storage File System disk blocks variable-length segments hierarchical file system Operating System Stdio Library FILE * stream Appl Prog User process int fd

15 Stream Abstraction Any source of input or destination for output  E.g., keyboard as input, and screen as output  E.g., files on disk or CD, network ports, printer port, … Accessed in C programs through file pointers  E.g., FILE *fp1, *fp2;  E.g., fp1 = fopen(“myfile.txt”, “r”); Three streams provided by stdio.h  Streams stdin, stdout, and stderr –Typically map to keyboard, screen, and screen  Can redirect to correspond to other streams –E.g., stdin can be the output of another program –E.g., stdout can be the input to another program

16 Sequential Access to a Stream Each stream has an associated file position  Starting at beginning of file (if opened to read or write)  Or, starting at end of file (if opened to append) Read/write operations advance the file position  Allows sequencing through the file in sequential manner Support for random access to the stream  Functions to learn current position and seek to new one file

17 Example: Opening a File FILE *fopen(“myfile.txt”, “r”)  Open the named file and return a stream  Includes a mode, such as “r” for read or “w” for write Creates a FILE data structure for the file  File descriptor, mode, status, buffer, …  Assigns fields and returns a pointer Opens or creates the file, based on the mode  Write (‘w’): create file with default permissions  Read (‘r’): open the file as read-only  Append (‘a’): open or create file, and seek to the end

18 Example: Formatted I/O int fprintf(fp1, “Number: %d\n”, i)  Convert and write output to stream in specified format int fscanf(fp1, “FooBar: %d”, &i)  Read from stream in format and assign converted values Specialized versions  printf(…) is just fprintf(stdout, …)  scanf(…) is just fscanf(stdin, …)

19 Really Specialized Versions #include int printf(const char *format,...); int fprintf(FILE *stream, const char *format,...); int sprintf(char *str, const char *format,...); int snprintf(char *str, size_t size, const char *format,...); #include int vprintf(const char *format, va_list ap); int vfprintf(FILE *stream, const char *format, va_list ap); int vsprintf(char *str, const char *format, va_list ap); int vsnprintf(char *str, size_t size, const char *format, va_list ap);

20 Example: A Simple getchar() int getchar(void) { static char c; if (read(0, &c, 1) == 1) return c; else return EOF; } Read one character from stdin  File descriptor 0 is stdin  &c points to the buffer  1 is the number of bytes to read Read returns the number of bytes read  In this case, 1 byte means success

21 Making getchar() More Efficient Poor performance reading one byte at a time  Read system call is accessing the device (e.g., a disk)  Reading one byte from disk is very time consuming  Better to read and write in larger chunks Buffered I/O  Read a large chunk from disk into a buffer –Dole out bytes to the user process as needed –Discard buffer contents when the stream is closed  Similarly, for writing, write individual bytes to a buffer –And write to disk when full, or when stream is closed –Known as “flushing” the buffer

22 Better getchar() with Buffered I/O int getchar(void) { static char base[1024]; static char *ptr; static int cnt = 0; if (cnt--) return *ptr++; cnt = read(0, base, sizeof(base)); if (cnt <= 0) return EOF; ptr = base; return getchar(); } persistent variables base ptr But, many functions may read (or write) the stream…

23 Details of FILE in stdio.h (K&R 8.5) #define OPEN_MAX 20 /* max files open at once */ typedef struct _iobuf { int cnt; /* num chars left in buffer */ char *ptr; /* ptr to next char in buffer */ char *base; /* beginning of buffer */ int flag; /* open mode flags, etc. */ char fd; /* file descriptor */ } FILE; extern FILE _iob[OPEN_MAX]; #define stdin (&_iob[0]) #define stdout (&_iob[1]) #define stderr (&_iob[2])

24 A Funny Thing About Buffered I/O int main() { printf(“Step 1\n”); sleep(10); printf(“Step2\n”); } Run “a.out > out.txt &” and then “tail -f out.txt”  To run a.out in the background, outputting to out.txt  And then to see the contents on out.txt Neither line appears till ten seconds have elapsed  Because the output is being buffered  Add fflush(stdout) to flush the output buffer  fclose() also flushes the buffer before closing

25 Challenges of Writing Write system call  int write(int fd, void *buf, int count);  Writes up to count bytes into fd, from the buffer at buf Problem: might not write everything  Can return a number less than count  E.g., if the file system ran out of space Solution: safe_write  Try again to write the remaining bytes  Produce an error if it impossible to write more

26 Safe-Write Code int safe_write(int fd, char *buf, int nbytes) { int n; char *p = buf; char *q = buf + nbytes; while (p < q) { if ((n = write(fd, p, (q-p)*sizeof(char))) > 0) p += n/sizeof(char); else perror(“safe_write:”); } return nbytes; } pqp

27 Summary of System Calls and Stdio Standard I/O library provides simple abstractions  Stream as a source or destination of data  Functions for manipulating files and strings Standard I/O library builds on the OS services  Calls OS-specific system calls for low-level I/O  Adds features such as buffered I/O and safe writing Powerful examples of abstraction  User programs can interact with streams at a high level  Standard I/O library deals with some more gory details  Only the OS deals with the device-specific details