Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction to Systems Programming (CS 0449) C Preprocessing Makefile File I/O.

Similar presentations


Presentation on theme: "Introduction to Systems Programming (CS 0449) C Preprocessing Makefile File I/O."— Presentation transcript:

1 Introduction to Systems Programming (CS 0449) C Preprocessing Makefile File I/O

2 C Preprocessor Modifies C code "to save typing" –Define constants –Define macros –Include files –Other parameters (time of compilation...)

3 Preprocessor constants Define a symbolic constant like so #define PI 3.141526 Better version #define PI ( 3.141526 ) Use the symbolic constant circle_length = 2 * PI * radius ;

4 Preprocessor constants (2) Check if constant defined ( #ifdef ) #define VERBOSE... #ifdef VERBOSE printf("I am extremely glad to see you !\n"); #else printf("Hi !\n"); #endif #pragma – this directive is for inserting compiler- dependent commands into a file.

5 Preprocessor Macros Parameterized Macros: Similar to function calls. Symbolic parameters ! #define SQUARE( x ) x * x Better version: #define SQUARE( x ) ((x) * (x)) Usage:What will be the output for each version? int x x = SQUARE ( 1 + 2 + 3 );  (1+2+3*1+2+3) =??? printf( " x = %d \n", x ); is x=11?, or is it, x=36? How do you fix it to generate 36?  ((1+2+3) * (1+2+3))

6 Including files Used to include header files Can be used to include any file Beware of including header files twice #include "MyFileName.c"

7 Header files Usually define function prototypes, user defined types and global variables. Avoid including twice int x;/* included from myHeader.h */ Standard header file header #ifndef MyHeaderFile_H #define MyHeaderFile_H... /* header file contents goes here */ #endif

8 /* example.c */ #include #define ONE 1 main(){ if(ONE != 1) return 0; printf("The answer is %d.\n", myfunc(2,6) ); } myfunc( int a, int b) { int i = ONE, j = ONE; for( ; i <= b; ++i) j = j * a; return j; } See this Example

9 Makefile Script file to automate program compilation and linking (making) 1. Write the "makefile" 2. Write your programs 3. Run "make" or "make -f makefile" Makefile is a list of rules and commands http://www.gnu.org/software/make/

10 Makefile Comments start with "#" # This is a makefile for Hello World application Variable definitions, usually in capital letters CC = m68k-palmos-gcc Main target definition all: hello1.prc Dependency definitions %.o: %.c $(CC) $(CFLAGS) -c $< -o $@

11 HelloWorld Makefile (1) #This file contains information used by a program called make to #automate building the program APP = hello1 APPID = LFh1 RCP = hello.rcp PRC = hello1.prc SRC = helloMain.c CC = m68k-palmos-gcc PILRC = pilrc OBJRES = m68k-palmos-obj-res BUILDPRC = build-prc CFLAGS = -g

12 HelloWorld Makefile (2) all: $(PRC) $(PRC): grc.stamp bin.stamp; $(BUILDPRC) $(PRC) $(APP) $(APPID) *.grc *.bin ls -l *.prc grc.stamp: $(APP) $(OBJRES) $(APP) touch $@ $(APP): $(SRC:.c=.o) $(CC) $(CFLAGS) $^ -o $@

13 HelloWorld Makefile (3) bin.stamp: $(RCP) $(PILRC) $^ $(BINDIR) touch $@ %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ depend dep: $(CC) -M $(SRC) >.dependencies clean: rm -rf *.o $(APP) *.bin *.grc *.stamp *~ veryclean: clean rm -rf *.prc *.bak

14 Command Line Arguments /* MyProg.c */ int main ( int argc, char *argv[] ) {... > myProg one two three argc = 4 argv[0] = "myProg" argv[1] = "one" argv[2] = "two" argv[3] = "three“ argv[4] = NULL

15 Introduction to Systems Programming (CS 0449) File Input / Output Ch.11 Deitel & Deitel book

16 What is a File A file is a collection of related data "C" treats files as a series of bytes Basic library routines for file I/O #include

17 Basics About Files Files must be opened and closed #include... FILE * myFile; myFile = fopen ("C:\\data\\myfile.txt", "r"); // Name, Mode (r: read) if ( myFile == NULL ){ // (w: write) /* Could not open the file */... }... fclose ( myFile ); Note: status = fclose(file-variable) status = 0 if file closed successfully- Error otherwise.

18 End-line Character Teletype Model 33 (long time ago...) used 2 characters at the end of line. –RETURN character –LINE FEED character Computer age –UNIX: LINE FEED at the end of line: "\n" –MS-DOS/Windows: both characters: "\n\r" –Apple: RETURN at the end of line: "\r"

19 File Types Text (ASCII) files Binary files Special (device) files stdin- standard input (open for reading) stdout- standard output (open for writing) stderr- standard error (open for writing)

20 Operations with Files Reading (r) –sequential –random Writing (w) –sequential –random –appending (a) fopen() revisited FILE *fOut; fOut = fopen("c:\\data\\log.txt", "w" );

21 Useful File I/O Functions fopen(), fclose() -- open/close files fprintf ( myFile, "format...",...)-- formatted I/O fscanf ( myFile, "format...",...) fgets(), fputs()-- for line I/O fgetc(), fputc()-- for character I/O feof()-- end of file detection, when reading

22 Binary and Random I/O Binary I/O readSize = fread(dataPtr, 1, size, myFile); //size of data read, if < size then encountered an error. writeSize = fwrite(dataPtr, 1, size, myFile); Positioning for random I/O fseek(myFile, 0, SEEK_SET); fseek(myFile, 10, SEEK_CUR); fseek(myFile, 0, SEEK_END);

23 Buffered v.s. Unbuffered I/O //no immediate write to file, instead buffer data and then flush after program finished Buffered I/O may improve performance Buffered I/O is with f...() functions –fopen(), fwrite() Unbuffered I/O –open(), write()

24 Streams v.s. Records Stream - a file interpreted as a stream of bytes Record set - a file interpreted as a set of records, structures –The structures can be of the same size, or –each record can be of different size

25 Example: En/De-Crypter int main ( int argc, char * argv[] ) { FILE *in, *out; in = fopen ( argv[1], "rb"); out = fopen ( argv[2], "wb"); if ( ! in | | ! out ){ printf( "Error opening files ! \n" ); return -1; } while( ! feof ( in ) ){ ch = fgetc ( in ); fputc ( (ch ^ 0xFF), out ); //UTF-16 vs UTF-8 (Unicode Byte Order mark) } //Unicode Transformation Format return 0; }


Download ppt "Introduction to Systems Programming (CS 0449) C Preprocessing Makefile File I/O."

Similar presentations


Ads by Google