COMP 530 Operating Systems C for Java Programmers Lab 0 Don Porter Portions courtesy Kevin Jeffay 1 COMP 530 Operating Systems Same Basic Syntax Data Types int char float void untyped pointer Can create other data types using typedef No Strings only char arrays Last character needs to be a 0 Not 0 but 0 COMP 530 Operating Systems struct C s object typedef struct foo int a void b void op int c function pointer foo t type declaration Actual contiguous memory Includes data and function pointers Pointers Memory placement explicit heap vs stack Two syntaxes dot arrow int main Ampersand Address of f PC struct foo f struct foo fp f f a 32 dot access object directly fp a 33 arrow follow a pointer fp malloc sizeof struct foo fp a 34 COMP 530 Operating Systems Stack main f f f a 32 a 33 a 0 b NULL b NULL b NULL op NULL op NULL op NULL fp Heap struct foo struct foo a 34 a 0 b NULL b NULL op NULL op NULL struct foo int a void b void op int c 4 COMP 530 Operating Systems fp op operator fp op 32 Same as calling operator 32 Function pointer example Stack main f f f a 32 a 33 a 0 b NULL b NULL b NULL op NULL op NULL op NULL fp Heap struct foo struct foo a 34 a 34 b NULL b NULL op NULL op struct foo int a void b void op int c Code in memory Main Operator 5 COMP 530 Operating Systems More on Function Pointers C allows function pointers to be used as members of a struct or passed as arguments to a function Continuing the previous example void myOp int c foo t myFoo malloc sizeof foo t myFoo op myOp set pointer myFoo op 5 Actually calls myop COMP 530 Operating Systems No Constructors or Destructors Must manually allocate and free memory No Garbage Collection void x malloc sizeof foo t sizeof gives you the number of bytes in a foo t DO NOT COUNT THEM YOURSELF free x Memory allocator remembers the size of malloc ed memory Must also manually initialize data Custom function memset x 0 sizeof x will zero it COMP 530 Operating Systems Memory References access a member of a struct myFoo a 5 get a pointer to a variable foo t fPointer myFoo struct fPointer a 6 dereference a pointer if 5 intPointer access a member of a struct via a pointer to the Without the you would be comparing 5 to the address of the int not its value COMP 530 Operating Systems Stack main x 6 x 5 xp xp NULL PC Int example int x 5 x is on the stack int xp x xp 6 printf d n x prints 6 xp int 0 xp 7 segmentation fault 9 COMP 530 Operating Systems Memory References cont refer to a member of an array char str malloc 5 sizeof char str 0 a Note str a is equivalent str increments the pointer such that str str 1 str str 1 str 2 str 3 str 4 str 0 str 1 str 2 str 3 str 4 COMP 530 Operating Systems The Chicken or The Egg Many C functions printf malloc etc are implemented in libraries These libraries use system calls System calls provided by kernel Thus kernel has to reimplement basic C libraries In some cases such as malloc can t use these language features until memory management is implemented COMP 530 Operating Systems For more help man pages are your friend not a dating service Ex man malloc or man 3 printf Section 3 is usually where libraries live there is a command line utility printf as well Use apropos term to search for man entries about term The C Programming Language by Brian Kernighan and Dennis Ritchie is a great reference COMP 530 Operating Systems Lab 0 Overview C programming on Linux refresher 13 COMP 530 Operating Systems Lab 0 Overview Write a simple C character stream processing program on Linux Read in characters from standard input write 80 character lines to standard output replacing Every enter return character newline by a space Every adjacent pair of percents with an Example for a 30 character output line The string abcdefghijklmn pqrstuvw yz abc def is output as abcdefghijklmn pqrstuvw yz ab COMP 530 Operating Systems classroom a out Abcdefghijklmn pqrstuvw yz abc def Abcdefghijklmn pqrstuvw yz ab 1234567890123456789012345 c def 12345678901234567890123 classroom This is the only output your program should generate There should be no prompts debugging messages status messages Note that your output will be interleaved with your input on the console indicated in purple above This is fine You can eliminate this if you use I O redirection COMP 530 Operating Systems classroom a out Abcdefghijklmn pqrstuvw yz abc def Abcdefghijklmn pqrstuvw yz ab 1234567890123456789012345 c def 12345678901234567890123 classroom control D When executing your program terminate stdin with a enter return control D sequence This non printable character sequence is referred to as end of file or EOF If you use I O redirection and read from a file you need not add the control D character at the end Linux does this for you COMP 530 Operating Systems Working on Homework Assignments You should all have Linux accounts in the Department If you don t go to the let help cs unc edu know ASAP If you need to have your password reset visit https www cs unc edu webpass onyen Log into classroom cs unc edu to do the assignments Create the directory structure comp530 in your Linux Execute the magic incantations to protect your home directory homework fs sa comp530 system anyuser none Execute these instructions before the next steps COMP 530 Operating Systems Checking out the starter code Once you have a github account registered Make sure you accept the invite Click https github com comp530 f18 Click the link in the homework to create a private repo Then on your machine or classroom substituting your team for team don see the green clone button git clone git github com comp530 f18 lab0 team don git 18 COMP 530 Operating Systems Submitting homework Commit your pending changes See the output of git status Commit the changes you wish to submit git add ex2 c And any other files that changed git commit m Finished lab 0 make handin You may need to add files to your gitignore file and commit that should not be handed in 2x check on github your changes are there and tagged handin If you don t follow these instructions exactly your HW will not be graded COMP 530 Operating Systems Lab 0 Programming Notes The machines you should use for programming are classroom cs unc edu primary snapper cs unc edu Access either machine via a secure shell secure telnet application on your PC secondary You can develop your code anywhere you like but Your programs will be tested on classroom and correctness will be assessed based on their performance on classroom Always make sure your program
View Full Document