1 / 38

Programming Tools, C Programming in UNIX, Make, and SCCS

Programming Tools, C Programming in UNIX, Make, and SCCS. What we’ll be looking at…. C compiler make utility sccs (Source Code Control System) rcs (Revision Control System) programming examples. Programming in C. UNIX was developed in C provides easy access for system calls

faye
Download Presentation

Programming Tools, C Programming in UNIX, Make, and SCCS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programming Tools, C Programming in UNIX, Make, and SCCS

  2. What we’ll be looking at… • C compiler • make utility • sccs (Source Code Control System) • rcs (Revision Control System) • programming examples

  3. Programming in C • UNIX was developed in C • provides easy access for system calls • and a variety of libraries are available • you use the editor of your choice (like vi) • create source code file ending with “.c”

  4. C Programming Example /* Program name: Hello World Created: August 1, 1999 Author: Author’s name*/ #include <stdio.h> main () { printf (“Hello World\n”); }

  5. C Programming Example /* Program name: Hello World Created: August 1, 1999 Author: Author's name */ #include <stdio.h> main () { char *name; printf("Please enter your name: "); scanf("%s", name); printf ("Hello, %s!\n", name); }

  6. C Programming Example /* program - tabs.c convert tabs in standard input to spaces in standard output while keeping columns */ #include <stdio.h> #define TABSIZE 8 main() { char ch; /* character read from stdin */ int posn = 0; /* column position of character */ int inc; /* column increment to tab stop */ while ((ch = getchar() ) != EOF) switch(ch) { case ‘\t’: /* ch is a tab */ inc = findstop(posn); posn += inc; for ( ; inc > 0; inc--) putchar(‘ ‘); break;

  7. example (cont.) case ‘\n’: /* ch is a newline */ putchar(ch); posn = 0; break; default: /* ch is anything else */ putchar(ch); posn++; break; } } /*------------------------------------------------------------------*/ /* function to compute size of increment to next tab stop */ findstop() int col; /* column position of tab character */ { return (TABSIZE - (col % TABSIZE)); } /*--- eof - tab.c ---*/

  8. #include statement • angle brackets <stdio.h> • ie. #include <stdio.h> • look for header file in standard directory • /usr/include on most systems • quotes “/xxx/yyy/zzz.h” • gets header file from directory you specify • ie. #include “/alex/cprogs/ledg.h”

  9. Compiling • gcc tab.c (We are using a freeware C compiler called gcc) • there are 4 processes called in turn by gcc • preprocessor • compiler -- creates assembler code • assembler -- creates object - .o file • linker (link editor) -- creates executable image • a.out (by default) • or you can specify with -o switch

  10. other switches…. • -l (“el” not “one”) • specify other libraries to search • -O • optimize program • -o • give executable the name of your choice • -c • suppress linking (link editor) phase

  11. cheap debug tool... • display debug info from program to stderr • an example for the tab.c program might be: • fprintf(stderr, “before function is called, posn is %d\n”, posn) • remember posn was declared variable in the program • imbed as many “print” statements as you need • any where you need them.... • don’t forget to remove ALL of the debug print statements when you are done!!! • ....or at least comment them out!

  12. lint • no, it isn’t something from your pocket… • it is a C program verifier • checks program for bugs and possible portability problems • lint is VERY strict (unlike the C compiler) • not all bugs are catastrophic • but if lint complains you should try to fix your code before compiling….

  13. debuggers • you can use whichever debugger you wish • or is available on your system • some choices might be: • adb, sdb, debug, or dbx • they tend to be command line oriented and interactive • can be used to look into a core file as well!

  14. Controlling Processes • fork() - creates a new child process • wait() - cause parent process to wait for child to finish running before it resumes execution • exit() - cause a process to exit • nice() - change the priority of a process • kill() - send a signal to a process

  15. Filesystem Access • stat() - get status information from an inode • access() - check file access permissions • creat() - create a new file • open() - open an existing file • read() - read a file • write() - write a file • close() - close a file • unlink() - unlink a file (delete name reference to inode) • chmod() - change file access permissions • chown() - change file ownership

  16. make utility • large programs tend to have many source and header files that depend on one another in complex ways • make automates the process of determining which modules need to be compiled due to their dependency relationships • looks at dependency lines in file makefile in the working directory

  17. make (cont…) • at it’s simplest • dependency lines indicate relationships among files, specifying a target file that depends on one or more prerequisite files • if any prerequisite is newer than a target then update target based on construction commands that follow the dependency line • make usually stops when it encounters an error during the construction process

  18. a simple makefile target: prerequisite-list construction-commands for example….. to compile the program “mytab” mytab: tab.c gcc -o mytab tabs.c

  19. ...a more complicated makefile form: size.o length.o gcc -o form size.o length.o size.o: size.c form.h gcc -c size.c length.o: length.c form.h gcc -c length.c form.h: num.h table.h cat num.h table.h > form.h

  20. another example... # # makefile for compute # compute: compute.o calc.o gcc -o compute compute.o calc.o compute.o: compute.c compute.h gcc -c -O compute.c calc.o: calc.c gcc -c calc.c clean: note this is on next line @- rm *.o

  21. executing make • make<cr> (on aries you’ll find make in the /usr/ccs/bin directory) • uses makefile in the current working directory • if program is current, then make does nothing except tell you so • you can directly refer to any label in the makefile • ie. make clean • or. make compute (the default for this example)

  22. touch • If you perform a successful make, you will sometimes want to repeat the entire process again for testing purposes • If you get the message “file” is up to date then it is telling you that nothing has changed and it doesn’t need to run again • Touch will change the last modification time of any file ie; touch -c tabs.c • By default if the specified file doesn’t exist it is created with a zero size. To prevent use the –c option

  23. Source Code Management • helps keep track of projects involving many files over long periods of time • helps keep track of versions • for both source code and documentation • a must have when more than one person is working on the project

  24. Source Code Management • UNIX systems include two utilities for managing and tracking changes to files • SCCS, the Source Code Control System • included with SVR4 • RCS, the Revision Control System • provided as add-on by many manufacturers • they can be used on any text file • but are usually used to manage source code and software documentation

  25. SCCS • when you change a SCCS file and record the changes in SCCS, the set of changes is referred to as a delta • each delta has an associated: • version number • in SCCS the version number is known as a: • SCCS Identification String (SID)

  26. SID • consists of either 2 or 4 numbers • first two (which are always used) • release • level • default for initial file creation is 1.1 • you have control over the numbering • you can skip level numbers • and change release numbers

  27. SID (continued…) • the second two numbers represent: • branch • sequence number • default to 1.1 • so you could see something like 2.3.1.1 • used when changes are made to an intermediate version of a file • branching away from the sequential development

  28. SCCS commands…. • sccs - a front end to the SCCS utility. • automatically prepends SCCS/s. to any filename arguments • great stuff if you are using the SCCS subdirectory! • Note: you’ll need to know where the sccs commands such as admin live. I have the path included for some examples but not all in the following slides. On aries this path is /usr/bin

  29. SCCS commands…. • Basic setup and editing • admin • create or add new SCCS files • change options for SCCS files • sccs admin -itab.c SCCS/s.tabs.c • get • retrieve text version of SCCS files • -e switch gets an editable text file! • sccs get –e SCCS/s.tabs.c • Will give you a tabs.c file that can be edited in your current directory • Also creates a p.tabs.c that goes away when the file is returned to the library

  30. SCCS commands…. • delta • incorporate changes to one or more SCCS files • i.e., append a new delta • normally removes the original text file • unget • cancel a previous get -e • don’t create a new delta

  31. SCCS commands…. • Fixing deltas • cdc • change delta comments • comb • combine consecutive deltas into a single delta • produces script that must be run to actually accomplish the task • rmdel -r • remove a delta from SCCS files

  32. SCCS commands…. • Information • help • online help facility • prs • print formatted info about SCCS files • sact • report on editing activity on SCCS files • what • search for @(#) pattern and print text that follows

  33. SCCS commands…. • More commands • sccsdiff • show differences between any two SCCS files sccs sccsdiff -r1.1 -r1.2 SCCS/s.tab.c • val • validate an SCCS file

  34. Creating a SCCS file • admin -inamefilename • name: file SCCS will encode • filename: name of SCCS encoded file • always start with s. • for example: admin -ihello s.hello • creates encoded file in the current working directory • or: admin -hello SCCS/s.hello • assuming you’ve created a subdirectory called SCCS to store the encoded files separate from the working directory

  35. Retrieving a SCCS file • get • retrieve text version of SCCS file • use -e option to retrieve an editable file • if you are using the SCCS subdirectory: • sccs get -e SCCS/s.hello - and - • -r option • change major version number (say 1.5 to 2.1) • retrieve earlier version (which causes a branch)

  36. Recording changes to SCCS file • delta • incorporate changes (add a delta) to one or more SCCS files • used to store changes made in file retrieved by get -e command • example: • sccs delta hello -or- • Sccs delta SCCS/s.hello • prompts for comment • end with <CTRL>D on line by itself

  37. Controlling access to SCCS • use admin to establish list of users who are allowed to make deltas. • by default the list is empty • which means anyone can make deltas • if the list is not empty only those on the list can make deltas • done on a ‘per file’ basis - each file under control of SCCS has a separate list

  38. Controlling access (continued) • examples: • adding users to the list • sccs admin -ainstructor1 -astudent1 SCCS/s.hello • sccs admin -astudent2 -astudent3 hello • erasing users from the list • sccs admin -einstructor2 SCCS/s.hello • lock and unlock releases • sccs admin -fl2 hello (locks release 2 of hello) • sccs admin -fla hello (unlocks all releases)

More Related