 2000 Prentice Hall, Inc. All rights reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction 14.2Redirecting Input/Output on UNIX and DOS Systems.

Slides:



Advertisements
Similar presentations
TWO STEP EQUATIONS 1. SOLVE FOR X 2. DO THE ADDITION STEP FIRST
Advertisements

Advanced Piloting Cruise Plot.
© 2008 Pearson Addison Wesley. All rights reserved Chapter Seven Costs.
Copyright © 2003 Pearson Education, Inc. Slide 1 Computer Systems Organization & Architecture Chapters 8-12 John D. Carpinelli.
Chapter 1 The Study of Body Function Image PowerPoint
1 Copyright © 2013 Elsevier Inc. All rights reserved. Chapter 1 Embedded Computing.
Copyright © 2011, Elsevier Inc. All rights reserved. Chapter 5 Author: Julia Richards and R. Scott Hawley.
Copyright © 2011, Elsevier Inc. All rights reserved. Chapter 6 Author: Julia Richards and R. Scott Hawley.
Author: Julia Richards and R. Scott Hawley
1 Copyright © 2013 Elsevier Inc. All rights reserved. Appendix 01.
1 Copyright © 2013 Elsevier Inc. All rights reserved. Chapter 3 CPUs.
1 Copyright © 2010, Elsevier Inc. All rights Reserved Fig 2.1 Chapter 2.
Properties Use, share, or modify this drill on mathematic properties. There is too much material for a single class, so you’ll have to select for your.
UNITED NATIONS Shipment Details Report – January 2006.
© 2010 Pearson Addison-Wesley. All rights reserved. Addison Wesley is an imprint of Chapter 11: Structure and Union Types Problem Solving & Program Design.
Jeopardy Q 1 Q 6 Q 11 Q 16 Q 21 Q 2 Q 7 Q 12 Q 17 Q 22 Q 3 Q 8 Q 13
Jeopardy Q 1 Q 6 Q 11 Q 16 Q 21 Q 2 Q 7 Q 12 Q 17 Q 22 Q 3 Q 8 Q 13
Properties of Real Numbers CommutativeAssociativeDistributive Identity + × Inverse + ×
My Alphabet Book abcdefghijklm nopqrstuvwxyz.
DIVIDING INTEGERS 1. IF THE SIGNS ARE THE SAME THE ANSWER IS POSITIVE 2. IF THE SIGNS ARE DIFFERENT THE ANSWER IS NEGATIVE.
FACTORING ax2 + bx + c Think “unfoil” Work down, Show all steps.
Year 6 mental test 5 second questions
Year 6 mental test 10 second questions
Solve Multi-step Equations
REVIEW: Arthropod ID. 1. Name the subphylum. 2. Name the subphylum. 3. Name the order.
1 Chapter 10 - Structures, Unions, Bit Manipulations, and Enumerations Outline 10.1Introduction 10.2Structure Definitions 10.3Initializing Structures 10.4Accessing.
ABC Technology Project
2000 Prentice Hall, Inc. All rights reserved. 1 Chapter 10 - Structures, Unions, Bit Manipulations, and Enumerations Outline 10.1Introduction 10.2Structure.
1 Undirected Breadth First Search F A BCG DE H 2 F A BCG DE H Queue: A get Undiscovered Fringe Finished Active 0 distance from A visit(A)
VOORBLAD.
15. Oktober Oktober Oktober 2012.
1 public class Newton { public static double sqrt(double c) { double epsilon = 1E-15; if (c < 0) return Double.NaN; double t = c; while (Math.abs(t - c/t)
Copyright © 2012, Elsevier Inc. All rights Reserved. 1 Chapter 7 Modeling Structure with Blocks.
BIOLOGY AUGUST 2013 OPENING ASSIGNMENTS. AUGUST 7, 2013  Question goes here!
Factor P 16 8(8-5ab) 4(d² + 4) 3rs(2r – s) 15cd(1 + 2cd) 8(4a² + 3b²)
Basel-ICU-Journal Challenge18/20/ Basel-ICU-Journal Challenge8/20/2014.
1..
© 2012 National Heart Foundation of Australia. Slide 2.
Adding Up In Chunks.
Understanding Generalist Practice, 5e, Kirst-Ashman/Hull
Chapter 5 Test Review Sections 5-1 through 5-4.
Addition 1’s to 20.
Model and Relationships 6 M 1 M M M M M M M M M M M M M M M M
25 seconds left…...
Januar MDMDFSSMDMDFSSS
Week 1.
Analyzing Genes and Genomes
We will resume in: 25 Minutes.
©Brooks/Cole, 2001 Chapter 12 Derived Types-- Enumerated, Structure and Union.
Essential Cell Biology
Intracellular Compartments and Transport
PSSA Preparation.
Essential Cell Biology
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 13 - Exception Handling Outline 13.1 Introduction 13.2 Exception-Handling Overview 13.3 Other.
CpSc 3220 Designing a Database
User Defined Functions Lesson 1 CS1313 Fall User Defined Functions 1 Outline 1.User Defined Functions 1 Outline 2.Standard Library Not Enough #1.
Data Structures Using C++ 2E
 2000 Prentice Hall, Inc. All rights reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction 14.2Redirecting Input/Output on UNIX and DOS Systems.
Chapter 14 - Advanced C Topics Associate Prof. Yuh-Shyan Chen Dept. of Computer Science and Information Engineering National Chung-Cheng University.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 20 - C Legacy Code Topics Outline 20.1 Introduction 20.2 Redirecting Input/Output on UNIX and.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction.
Chapter 13 & 14 C Preprocessor and Other C Topics Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education.
 2000 Deitel & Associates, Inc. All rights reserved. Chapter 18 - C Legacy Code Topics Outline 18.1Introduction 18.2Redirecting Input/Output on UNIX and.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction 14.2Redirecting Input/Output on UNIX and DOS Systems.
Chapter 14 - Advanced C Topics
Presentation transcript:

 2000 Prentice Hall, Inc. All rights reserved. Chapter 14 - Advanced C Topics Outline 14.1Introduction 14.2Redirecting Input/Output on UNIX and DOS Systems 14.3Variable-Length Argument Lists 14.4Using Command-Line Arguments 14.5Notes on Compiling Multiple-Source-File Programs 14.6Program Termination with exit and atexit 14.7The volatile Type Qualifier 14.8Suffixes for Integer and Floating-Point Constants 14.9More on Files 14.10Signal Handling 14.11Dynamic Memory Allocation with calloc and realloc 14.12The Unconditional Branch: goto

 2000 Prentice Hall, Inc. All rights reserved Introduction Several advanced topics in this chapter Operating system specific –Usually UNIX or DOS

 2000 Prentice Hall, Inc. All rights reserved Redirecting Input/Output on UNIX and DOS Systems Standard I/O - keyboard and screen –Redirect input and output Redirect symbol( < ) –Operating system feature, not a C feature –UNIX and DOS –$ or % represents command line –Example: $ myProgram < input –Rather than inputting values by hand, read them from a file Pipe command( | ) –Output of one program becomes input of another $ firstProgram | secondProgram –Output of firstProgram goes to secondProgram

 2000 Prentice Hall, Inc. All rights reserved Redirecting Input/Output on UNIX and DOS Systems Redirect output ( > ) –Determines where output of a program goes –Example: $ myProgram > myFile Output goes into myFile (erases previous contents) Append output ( >> ) –Add output to end of file (preserve previous contents) –Example: $ myOtherProgram >> myFile Output is added onto the end of myFile

 2000 Prentice Hall, Inc. All rights reserved Variable-Length Argument Lists Functions with unspecified number of arguments –Load –Use ellipsis(... ) at end of parameter list –Need at least one defined parameter –Example: double myfunction ( int i,... ); –The ellipsis is only used in the prototype of a function with a variable length argument list –printf is an example of a function that can take multiple arguments –The prototype of printf is defined as int printf( const char* format,... );

 2000 Prentice Hall, Inc. All rights reserved. 14.3Variable-Length Argument Lists Macros and definitions of the variable arguments header ( stdarg.h ) –va_list Type specifier, required (va_list arguments;) –va_start( arguments, other variables ) Intializes parameters, required before use –va_arg( arguments, type ) Returns a parameter each time va_arg is called Automatically points to next parameter –va_end( arguments ) Helps function have a normal return

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Load header 1.1 Function prototype (variable length argument list) 1.2 Initialize variables 2. Function calls 3. Function definition 3.1 Create ap ( va_list object) 3.2 Initialize ap ( va_start(ap, i) ) 1/* Fig. 14.2: fig14_02.c 2 Using variable-length argument lists */ 3#include 4#include 5 6double average( int,... ); 7 8int main() 9{9{ 10 double w = 37.5, x = 22.5, y = 1.7, z = 10.2; printf( "%s%.1f\n%s%.1f\n%s%.1f\n%s%.1f\n\n", 13 "w = ", w, "x = ", x, "y = ", y, "z = ", z ); 14 printf( "%s%.3f\n%s%.3f\n%s%.3f\n", 15 "The average of w and x is ", 16 average( 2, w, x ), 17 "The average of w, x, and y is ", 18 average( 3, w, x, y ), 19 "The average of w, x, y, and z is ", 20 average( 4, w, x, y, z ) ); return 0; 23} 24 25double average( int i,... ) 26{ 27 double total = 0; 28 int j; 29 va_list ap;

 2000 Prentice Hall, Inc. All rights reserved. Outline 3.3 Access arguments va_arg(ap, double) 3.4 End function va_end(ap); return total/1; Program Output w = 37.5 x = 22.5 y = 1.7 z = 10.2 The average of w and x is The average of w, x, and y is The average of w, x, y, and z is for ( j = 1; j <= i; j++ ) 34 total += va_arg( ap, double ); va_end( ap ); 37 return total / i; 38} va_start( ap, i ); 32

 2000 Prentice Hall, Inc. All rights reserved Using Command-Line Arguments Pass arguments to main on DOS or UNIX –Define main as int main( int argc, char *argv[] ) –int argc Number of arguments passed –char *argv[] Array of strings Has names of arguments in order –argv[ 0 ] is first argument –Example: $ copy input output argc : 3 argv[ 0 ] : "copy" argv[ 1 ] : "input" argv[ 2 ] : "output"

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Initialize variables 2. Function calls ( fopen ) 2.1 Specify open type (read or write) 3. Copy file 1/* Fig. 14.3: fig14_03.c 2 Using command-line arguments */ 3#include 4 5int main( int argc, char *argv[] ) 6{6{ 7 FILE *inFilePtr, *outFilePtr; 8 int c; 9 10 if ( argc != 3 ) 11 printf( "Usage: copy infile outfile\n" ); 12 else 13 if ( ( inFilePtr = fopen( argv[ 1 ], "r" ) ) != NULL ) if ( ( outFilePtr = fopen( argv[ 2 ], "w" ) ) != NULL ) while ( ( c = fgetc( inFilePtr ) ) != EOF ) 18 fputc( c, outFilePtr ); else 21 printf( "File \"%s\" could not be opened\n", argv[ 2 ] ); else 24 printf( "File \"%s\" could not be opened\n", argv[ 1 ] ); return 0; 27} Notice argc and argv[] in main argv[1] is the second argument, and is being read. argv[2] is the third argument, and is being written to. Loop until End Of File. fgetc a character from inFilePtr and fputc it into outFilePtr.

 2000 Prentice Hall, Inc. All rights reserved Notes on Compiling Multiple-Source- File Programs Programs with multiple source files –Function definition must be in one file (cannot be split up) –Global variables accessible to functions in same file Global variables must be defined in every file in which they are used –Example: If integer myGlobal is defined in one file To use it in another file you must include the statement extern int myGlobal; –extern States that the variable is defined in another file –Function prototypes can be used in other files without an extern statement Have a prototype in each file that uses the function

 2000 Prentice Hall, Inc. All rights reserved Notes on Compiling Multiple-Source- File Programs Keyword static –Specifies that variables can only be used in the file in which they are defined Programs with multiple source files –Tedious to compile everything if small changes have been made to only one file –Can recompile only the changed files –Procedure varies on system UNIX: make utility

 2000 Prentice Hall, Inc. All rights reserved Program Termination with exit and atexit Function exit –Forces a program to terminate –Parameters – symbolic constants EXIT_SUCCESS or EXIT_FAILURE –Returns an implementation-defined value –Example: exit( EXIT_SUCCESS ); Function atexit atexit( functionToRun ); –Registers functionToRun to execute upon successful program termination atexit itself does not terminate the program –Register up to 32 functions (multiple atexit() statements) Functions called in reverse register order –Called function cannot take arguments or return values

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Register function print using atexit 2. User input 3. Output 3.1 Function definition 1/* Fig. 14.4: fig14_04.c 2 Using the exit and atexit functions */ 3#include 4#include 5 6void print( void ); 7 8int main() 9{9{ 10 int answer; atexit( print ); /* register function print */ 13 printf( "Enter 1 to terminate program with function exit" 14 "\nEnter 2 to terminate program normally\n" ); 15 scanf( "%d", &answer ); if ( answer == 1 ) { 18 printf( "\nTerminating program with " 19 "function exit\n" ); 20 exit( EXIT_SUCCESS ); 21 } printf( "\nTerminating program by reaching" 24 " the end of main\n" ); 25 return 0; 26} 27 28void print( void ) 29{ 30 printf( "Executing function print at program " 31 "termination\nProgram terminated\n" ); 32}

 2000 Prentice Hall, Inc. All rights reserved. Outline Program Output Enter 1 to terminate program with function exit Enter 2 to terminate program normally : 1 Terminating program with function exit Executing function print at program termination Program terminated Enter 1 to terminate program with function exit Enter 2 to terminate program normally : 2 Terminating program by reaching the end of main Executing function print at program termination Program terminated

 2000 Prentice Hall, Inc. All rights reserved The volatile Type Qualifier volatile qualifier –Variable may be altered outside program –Variable not under control of program –Variable cannot be optimized

 2000 Prentice Hall, Inc. All rights reserved. 14.8Suffixes for Integer and Floating-Point Constants C provides suffixes for constants –unsigned integer – u or U –long integer – l or L –unsigned long integer – ul or UL –float – f or F –long double – l or L –Examples: 174u 467L 3451ul –If integer constant is not suffixed type determined by first type capable of storing a value of that size ( int, long int, unsigned long int ) –If floating point not suffixed of type double

 2000 Prentice Hall, Inc. All rights reserved. 14.9More on Files C can process binary files –Not all systems support binary files Files opened as text files if binary mode not supported –Binary files should be used when rigorous speed, storage, and compatibility conditions demand it –Otherwise, text files are preferred Inherent portability, can use standard tools to examine data Function tmpfile –Opens a temporary file in mode "wb+" Some systems may process temporary files as text files –Temporary file exists until closed with fclose or until program terminates Function rewind –Positions file pointers to the beginning of the file

 2000 Prentice Hall, Inc. All rights reserved. 14.9More on Files File open modes:

 2000 Prentice Hall, Inc. All rights reserved Signal Handling Signal –Unexpected event, can terminate program Interrupts ( c), illegal instructions, segmentation violations, termination orders, floating-point exceptions (division by zero, multiplying large floats) Function signal –Traps unexpected events –Header –Receives two arguments a signal number and a pointer to the signal handling function Function raise –Takes an integer signal number and creates a signal

 2000 Prentice Hall, Inc. All rights reserved Signal Handling Signals defined in signal.h

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Function prototype 2. Generate random number 2.1 raise signal if x == Function definition 1/* Fig. 14.8: fig14_08.c 2 Using signal handling */ 3#include 4#include 5#include 6#include 7 8void signal_handler( int ); 9 10int main() 11{ 12 int i, x; signal( SIGINT, signal_handler ); 15 srand( clock() ); for ( i = 1; i <= 100; i++ ) { 18 x = 1 + rand() % 50; if ( x == 25 ) 21 raise( SIGINT ); printf( "%4d", i ); if ( i % 10 == 0 ) 26 printf( "\n" ); 27 } return 0; 30} 31 32void signal_handler( int signalValue ) signal set to call function signal_handler when a signal of type SIGINT occurs.

 2000 Prentice Hall, Inc. All rights reserved. Outline 3. Function definition Program Output 33{ 34 int response; printf( "%s%d%s\n%s", 37 "\nInterrupt signal ( ", signalValue, " ) received.", 38 "Do you wish to continue ( 1 = yes or 2 = no )? " ); scanf( "%d", &response ); while ( response != 1 && response != 2 ) { 43 printf( "( 1 = yes or 2 = no )? " ); 44 scanf( "%d", &response ); 45 } if ( response == 1 ) 48 signal( SIGINT, signal_handler ); 49 else 50 exit( EXIT_SUCCESS ); 51} User given option of terminating program Signal handler reinitialized by calling signal again

 2000 Prentice Hall, Inc. All rights reserved. Outline Program Output Interrupt signal ( 2 ) received. Do you wish to continue ( 1 = yes or 2 = no )? Interrupt signal ( 2 ) received. Do you wish to continue ( 1 = yes or 2 = no )?

 2000 Prentice Hall, Inc. All rights reserved Dynamic Memory Allocation with calloc and realloc Dynamic memory allocation –Can create dynamic arrays calloc( nmembers, size ) –nmembers – number of members –size – size of each member –Returns a pointer to a dynamic array realloc( pointerToObject, newSize ) –pointerToObject – pointer to the object being reallocated –newSize – new size of the object –Returns pointer to reallocated memory –Returns NULL if cannot allocate space –If newSize equals 0 then the object pointed to is freed –If pointerToObject equals 0 then it acts like malloc

 2000 Prentice Hall, Inc. All rights reserved The Unconditional Branch: goto Unstructured programming –Use when performance crucial –break to exit loop instead of waiting until condition becomes false goto statement –Changes flow control to first statement after specified label –A label is an identifier followed by a colon (i.e. start: ) –Quick escape from deeply nested loop goto start;

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Initialize variable 1.1 Labels 2. Loop 3. Print Program Output 1/* Fig. 14.9: fig14_09.c 2 Using goto */ 3#include 4 5int main() 6{6{ 7 int count = 1; 8 9 start: /* label */ 10 if ( count > 10 ) 11 goto end; printf( "%d ", count ); 14 ++count; 15 goto start; end: /* label */ 18 putchar( '\n' ); return 0; 21} Notice how start:, end: and goto are used