Lab 2: The Unix environment, Using vi, C programming SITE, uOttawa

Preview:

DESCRIPTION

Lab 2: The Unix environment, Using vi, C programming SITE, uOttawa. Practical tools. Editor Vi (emac) Compiler gcc Makefile make Debugging gdb. Using C/Unix/Linux at SITE. $ ssh linux. Vi Editor. A screen-based editor used by Unix users An experience with vi Starting the editor - PowerPoint PPT Presentation

Citation preview

1

Lab 2: The Unix environment, Lab 2: The Unix environment, Using vi, C programmingUsing vi, C programming

SITE, uOttawaSITE, uOttawa

2

Practical toolsPractical tools

EditorEditor Vi (emac)Vi (emac)

CompilerCompiler gccgcc MakefileMakefile makemake

DebuggingDebugging gdbgdb

3

Using C/Unix/Linux at Using C/Unix/Linux at SITESITE

$ ssh linux$ ssh linux

4

Vi EditorVi Editor

A screen-based editor used by Unix users An experience with vi

Starting the editor Cutting and Pasting/Deleting text Inserting New Text Moving the Cursor Within the File Moving the Cursor Around the Screen Replacing Text Searching for Text or Characters Saving and Quitting

http://www.eng.hawaii.edu/Tutor/vi.html#intro http://www.brezeale.com/technical_notes/

vim_notes.shtml

5

Vi Basic CommandsVi Basic Commands mkdir <dirname> - create a directory cp <filename> <target> - copy a file rm <filename> - delete a file vi <filename> - open a file pressing the <Esc> key turns off the Insert mode :q – quit with saving :x – quit without saving :i – insert text before cursor, until <Esc> hit :a – append text before cursor, until <Esc> hit $ - move cursor to the end of the current line :w – move cursor to the beginning of next word 0 – move cursor to the start of current line :o – open and put text in a new line after the cursor y1 – copy current character Yn – copy n characters yy – copy current line p - paste characters x – delete single character under cursor dd – delete the current line u – undo the last action :w – save a file /<string> - search the string forward ?<string> - search the string backward

6

AAvi vi Exercise Exercise

Create and edit Create and edit test.ctest.c file file

#include <stdio.h>#include <stdio.h>

main()main()

{{

printf(“Hello world, …\n”);printf(“Hello world, …\n”);

}}

7

C programming/Unix C programming/Unix

#include <stdio.h>#include <stdio.h>

main()main()

{{

printf(“hello, wolrd…\n”);printf(“hello, wolrd…\n”);

}}

$ mkdir csi3130$ mkdir csi3130

$cd csi3130$cd csi3130

$ $ vivi test.c test.c

$$cccc test.c test.c

$$a.outa.out

8

CompilerCompiler

GNU Compiler CollectionGNU Compiler Collection A compiler system produced by the GNU

Project supporting various programming languages

includes front ends for C (gcc), C++ (g++), Java (gcj), and Fortran (gFortran)

http://pages.cs.wisc.edu/~beechung/ref/gcc-intro.html

9

GCCGCC Compile C code to an executableCompile C code to an executable

gcc -o <executable-name> <.c files>gcc -o <executable-name> <.c files>

Reporting all warning messagesReporting all warning messages gcc -Wall -o <executable-name> <.c files>gcc -Wall -o <executable-name> <.c files>

10

GCC (Cont’d)GCC (Cont’d) An example of compiling two .c An example of compiling two .c

files into an executable programfiles into an executable program gcc -Wall -o assign1prob1 main.c list.cgcc -Wall -o assign1prob1 main.c list.c

An example of compiling two An example of compiling two files and then link them files and then link them separately separately gcc -Wall -o main.o -c main.c gcc -Wall -o main.o -c main.c gcc -Wall -o list.o -c list.c gcc -Wall -o list.o -c list.c gcc -Wall -o assign1prob1 main.o list.o gcc -Wall -o assign1prob1 main.o list.o

11

Make commandMake command

makemake automates the process automates the process of compiling a programof compiling a program

MakefileMakefile $ make$ make $ make clean $ make clean

12

DebuggingDebugging

gdbgdb is GNU Debugger is GNU Debugger A debugger for several languages Inspecting what the program is doing at

a certain point during execution Errors like segmentation faults may be

easier to find with the help of gdb http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/

html_node/gdb_toc.html

13

GDBGDB

enable built-in debugging enable built-in debugging support support gcc [other flags] -g <source files> -o gcc [other flags] -g <source files> -o

<output file><output file> generating an expanded symbol generating an expanded symbol

table for use with gdb table for use with gdb Example:Example: gcc -Wall -Werror -ansi -gcc -Wall -Werror -ansi -

pedantic-errors -g prog1.c -o prog1.xpedantic-errors -g prog1.c -o prog1.x

14

GDB (Cont’d)GDB (Cont’d) enter gdbenter gdb

gdbgdb enter gdbenter gdb

quitquit printing line from a source fileprinting line from a source file

listlist running a programrunning a program

runrun breakpoint at a line numberbreakpoint at a line number

break <c file name>:<line number>break <c file name>:<line number> break <line number>break <line number>

break at a particular functionbreak at a particular function break <c file name>:<functionname>break <c file name>:<functionname>

set a breakpoint with condition set a breakpoint with condition break <function or file name> if <condition>break <function or file name> if <condition>

deleting breakpointsdeleting breakpoints deletedelete

proceed onto the next breakpointproceed onto the next breakpoint continuecontinue

Single stepSingle step stepstep

15

debugging exercisedebugging exercise

Reverse a stringReverse a string#include <string.h>#include <stdio.h>char * reverse(char s[]){

int c, i, j;For(i =0, j=strlen(s)-1; i< j; i++, j--){ c = s[i];S[i] =s[j];S[j]=c;}

}

Main(){

printf(“%s \n”,reverse(“database”));}

16

GDB debugging GDB debugging exerciseexercise

Program failed, why???

Load the program into

GDB

17

GDB debugging GDB debugging exerciseexercise

Here failed?

What is the value of i

18

GDB debugging GDB debugging exerciseexercise

Try the basic GDB commands

here!

Track your program step by step, inspect the

variables..

19

Correct codeCorrect code#include <string.h>#include <stdio.h>char * reverse(char s[]){ int c, i, j; for(i =0, j=strlen(s)-1; i< j; i++, j--) { c = s[i]; s[i] =s[j]; s[j]=c; }return s;}

int main(){char myStr[9]="database";printf("%s \n",reverse(myStr));return 0;}

20

From Java to CFrom Java to C

21

Types, Operators and Types, Operators and ExpressionsExpressions

Data typeData typechar, int, float, double, short int, long int

ConstantsConstants #define PI 3.1415926

Typedef: assigning alternative names to existingTypedef: assigning alternative names to existing typedef int myInteger;

Relational and logical operatorsRelational and logical operators> >= < <= == !=

Increment and decrement operatorsIncrement and decrement operatorsb = a++; b = ++a; b = a--; b = --a;

22

Control FlowControl Flow The semicolon is a statement terminatorThe semicolon is a statement terminator

If-Else, Else-IfIf-Else, Else-Ifif (expression) if (expression) statement1 statement1else else if (expression)

statement2 statement2else statement3

For loopFor loopyou need to define the counter variable before the loop

for(expr1; expr2; expr3) statement

While-DoWhile-Doexpr1;While(expr2) statement expr3;

Do-WhileDo-Whiledo statementWhile(expression);

23

Control Flow (Cont’d)Control Flow (Cont’d) SwitchSwitch

switch (expression){switch (expression){

case const-expr : statementscase const-expr : statements

case const-expr : statementscase const-expr : statements

default: statementsdefault: statements

}}

Conditional expressions Conditional expressions (expr1 ? expr2 : expr3)(expr1 ? expr2 : expr3)

if(a>b)if(a>b)

z=a;z=a; z = (a > b) ? a : b ;z = (a > b) ? a : b ;

elseelse

z=b;z=b;

24

Function declarationFunction declaration

Return valueReturn value Default return value of a function in C is intDefault return value of a function in C is int

JavaJava The use of function may appear earlier than its definitionThe use of function may appear earlier than its definition

C programC program Should be Should be declareddeclared somewhere earlier than their invocations somewhere earlier than their invocations

int power(int b, int e); int power(int b, int e);

……

/* call power() here *//* call power() here */

……

int power(int b, int e) int power(int b, int e)

{{

int r = 1;int r = 1;

while (e-- > 0) r *= b; while (e-- > 0) r *= b;

return r;return r;

}}

int power(int b, int e) int power(int b, int e)

{{

int r = 1;int r = 1;

while (e-- > 0) r *= b; while (e-- > 0) r *= b;

return r;return r;

}}

main()main()

{{

......

/* call power() here *//* call power() here */

}}

25

Input and OutputInput and Output printf(“the int value is %d”, var); printf(“the string value is %s”, var); printf(“the charactr and double values are %c and %e”,

var); printf(“the double value is %e”, var);

scanf(“enter an int: %d”, var); scanf(“enter a string: %s”, var); scanf(“enter a character and a double: %c %e”, var); scanf(“enter a string: %s”, var);

Do not forget including <stdio.h>

26

Variable scopeVariable scope

int globalVar = 34;int globalVar = 34;

myFun()myFun()

{{

int x =1;int x =1;

}}

Global; outside of the function

Local

27

Some details about CSome details about C No boolean type in CNo boolean type in C

No explicit boolean typeNo explicit boolean type                     #define TRUE 1 #define TRUE 1

#define FALSE #define FALSE             if (a){             if (a){

… … } }

No function overloading in CNo function overloading in C Two functions cannot have the same name

Variables must be declared at the top of a basic block (for Variables must be declared at the top of a basic block (for some c systems)some c systems)

The following may not pass the compiler                {    int a;{    int a;              printf("Hello world\n");              printf("Hello world\n");                            char b;char b;         }          }

Lack of exceptionsLack of exceptions Illegal activity may not be told (e.g. access memory that hasn’t been allocated in some way)

No automated garbage collection in CNo automated garbage collection in C you must free the memory

28

Standard libraryStandard library <stdlib.h><stdlib.h>

dynamic memory allocationdynamic memory allocation <stdio.h><stdio.h>

Input/outputInput/output <string.h><string.h>

String handlingString handling <math.h><math.h>

Mathematical functionsMathematical functions <ctype.h><ctype.h>

CharactersCharacters

http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html

29

Some common errorsSome common errors if (a=1){if (a=1){                                some stuff some stuff

            }            }        ==    Boolean evaluation

=      Variable assignment operator

void myfunc(int a) { /* ... */ } void myfunc(int a) { /* ... */ } void myfunc(float b) { /* ... */ } void myfunc(float b) { /* ... */ }

error: myfunc already defined

30

ExerciseExercise Write a program that Write a program that

Accepts an input “x” (A value to progress up to) Accepts an input “x” (A value to progress up to) Starting at 0 and 1, outputs the Fibonacci Starting at 0 and 1, outputs the Fibonacci

sequence up to “x” permutations. sequence up to “x” permutations.

There should be two functions, for clarity. There should be two functions, for clarity. ((mainmain) Accepts the input and calls the fibonacci ) Accepts the input and calls the fibonacci

function. function. ((fibonaccifibonacci) One that accepts the value of x and ) One that accepts the value of x and

outputs the sequence. outputs the sequence.

31

Fibonacci in JavaFibonacci in Javaimport java.ioclass Fibonacci { public static void main(String args[]) {

System.out.println("How many numbers of the sequence would you like?"); InputStreamReader sr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(sr); try {

String input = br.readLine(); int n = Integer.valueOf(input).intValue(); fibonacci(n);

} catch (NumberFormatException e){System.out.println("That is not an integer. Please enter an integer value"); } catch (IOException e) { System.out.println("I did not recieve an input"); }

} public static void fibonacci(int n){

int a=0,b=1; for (int i=0;i<n;i++){

System.out.println(a); a=a+b; b=a-b;

} }}

32

Fibonacci in CFibonacci in C

#include <stdio.h> int main () {

int n; printf("\nHow many numbers of the sequence would you like?\n"); scanf("%d",&n); fibonacci(n); return 0;

} int fibonacci(int n) {

int a = 0; int b = 1; int sum; int i; for (i=0;i<n;i++) {

printf("%d\n",a); sum = a + b; a = b; b = sum;

} return 0;

}

Recommended