- version 1.0 By, Girish Kumar S Sotware En!ineer Glo"al E#!e Sotware $t#. Ban!alore,%&000' (o") **+&0&*+10 (ailI#)!irish,umar.s-!lo"ale#!esot..om GESL confidential C Interview questions 2 CONTENTS 1. Compilation steps 2. Memory Layout of C program 3. Stack Frame . !it"ise #rograms $. String #rograms %. #ointers &elate' #rograms (. )ata structure #rograms *. GESL confidential C Interview questions 3 1. Compilation Steps GESL confidential C program Preprossor Compiler: Leical !nal"#er Parser $ptimi#er Code generator !ssem%ler Li%rar" &li%c'a( Lin)er Eecuta%le *ile $t+er $%,ect modules test'c test'o a'out test's test'i C Interview questions - 2. Memory Layout of C program. GESL confidential !rguments and Environment varia%les Stac) &grow downwards( .eap &grow upwards( /ata &initiali#ed static data( 0SS &uninitiali#ed static data( Code &program instructions( Low !ddr .ig+ !ddr C Interview questions 1 3. Frame Pointer(FP) and Stack Pointer(SP) T+ese t"o register +ol's t+e a''ress of a memory location on t+e stack. ,+ile t+e stack pointer is a mo-ing reference to a single cell.it/s mo'ifie' "it+ eac+ pus+ or pop0. T+e frame pointer is use' for maintaining a su1routine/s -aria1les. 2ll local -aria1les are maintaine' on t+e stack in a contiguous 1lock create' "+en a su1routine is entere'.at run3time0. T+e su1routine/s arguments are also kept on t+e stack4 in t+e same memory 1lock as t+e -aria1les. T+is 1lock of memory is a su1routine/s stack frame4 an' t+e frame pointer is use' to reference t+e -arious memory locations comprise' 1y t+e stack frame. Stack frames are create' "+en a su1routine is entere'4 t+ey are 'elete' "+en t+e su1routine returns. Conse5uently t+e same area of memory.t+e stack0 is constantly recycle' as -arious su1routines e6ecute. T+at is4 se-eral su1routines use t+e same part of t+e stack for t+eir local -aria1les. E67 int p1 8 14 p2 8 24 p3 8 39 foo.int p14 int p24 int p30 : int -14 -24 -39 return ;9 < main.0 : foo.p14 p24 p309 < =alf of t+e stack frame is create' 1y t+e calling su1routine3main.0 in t+is case an' ot+er +alf 1y foo.0 itself. Main.0 passes arguments to foo.0 1y pus+ing t+em onto t+e stack9 t+ese pus+e' arguments are t+e first part of t+e ne" stack frame. T+e arguments are pus+e' from rig+t to left.p3 is pus+e' first. >n C 4 all argument passing .e6cept for arrays0 is 'one 1y -alue. T+at is 4 t+e -alue of t+e -aria1le p3 is passe' to foo.04 not p3 itself. T+e stack7 GESL confidential 2333 SP 1444: 1442: 144-: 1445: 1 3 2 C Interview questions 5 Fig7 T+e partially create' stack frame for foo.0. T+e contents of t+e original -aria1les +a-e 1een copie' +ere. Ne6t4 t+e su1routine foo.0 is actually calle'. T+is call puts t+e return a''ress on to t+e stack. Fig 7 T+e stack imme'iately after foo.0 is Entere'. ."e are no" in su1routine foo.0 1ut +a-e not yet e6ecute' any co'e in foo.0.0 T+e first t+ing t+at foo.0 'oes is preser-e t+e e6isting frame pointer 1y pus+ing it. T+en it copies t+e current stack pointer into t+e frame pointer. Fig 7 T+e stack after t+e ol' stack frame is sa-e'. Ne6t4 foo.0 allocates space for its o"n local -aria1les. T+is space is car-e' out of t+e stack 1y su1tracting a suita1ly large constant from t+e stack pointer. GESL confidential 2333 SP 1444: 1442: 144-: 1445: 1 3 2 6eturn address 778: 2333 SP 2333 *P 1444: 1442: 144-: 1445: 1 3 2 $ld frame pointer 778: 6eturn address 775: C Interview questions 9 Fig7 T+e &emain'er of t+e stack frame is create' ,+en t+e su1routine returns. Foo.0 +as to 'elete all t+e parts of t+e stack frame t+at it create'. Local -aria1les are 'elete' 1y copying t+e current -alue of t+e frame pointer into t+e stack pointer4 making t+e stack pointer point to t+e same place as t+e frame pointer. Fig7 T+e local -aria1les are 'elete'. GESL confidential 2333 *P 1444: 1442: 144-: 1445: 1 3 2 $ld frame pointer 778: 6eturn address 775: v1 v3 v2 2333 SP 77-: 772: 774: 2333 SP 2333 *P 1444: 1442: 144-: 1445: 1 3 2 $ld frame pointer 778: 6eturn address 775: C Interview questions 8 Ne6t4 t+e ol' frame pointer is restore' 1y popping its ol' -alue off t+e stack. Fig7 T+e ol' frame pointer is restore' "it+ a pop T+en foo.0 e6ecutes a &ET instruction4 returning to main.0 an' popping its return a''ress off t+e stack. T+e stack no" looks ?ust as it 'i' 1efore foo.0 "as calle'. Fig7 T+e stack after foo.0 returns. No"4 main.0 t+ro"s a"ay t+e stack -aria1les associate' "it+ t+e arguments. Since t+e arguments to a calle' su1routine aren/t use' 1y main.04 it 'oesn/t 1ot+er to pop t+em off t+e stack 1ack into t+e original -aria1les. GESL confidential 2333 SP 1444: 1442: 144-: 1445: 1 3 2 6eturn address 778: 2333 SP 1444: 1442: 144-: 1445: : : : C Interview questions 7 Entire stack frame 'iagram of main.0 program. &eturn -alue from t+e stack is returne' 1y register.accumulator0. >f you are not returning any t+ing t+e gar1age "ill 1e store' in register. GESL confidential v3 v2 v1 $ld *P 6eturn address p2 $ld *P 6eturn address p3 p1 argc argv 2333 SP 2333 *P C Interview questions 14 !. "it#ise programs 1.a''ing t"o integer int a''.int a4 int 10 : int temp 8 ;9 "+ile .10 : temp 8 a @ 19 1 8 .a A 10 BB 19 a 8 temp9 < return a9 < 333333333333333333333333333333333333333333 2. Su1traction of t"o integer int 1itCsu1 .int a4 int 10 : "+ile .10 : int t19 t1 8 a @ 19 1 8 .Da A 10 BB 19 a 8 t19 < return a9 < 3333333333333333333333333333333333333333333 3. Multiplication int 1itCmul .int a4 int 10 : int res 8 ;9 int i9 for .i 8 ;9 i B siEeof .10 F * 3 1 9 iGG0 if . 1 A . 1 BB i00 res G8 a BB i9 return res9 < int multiply.int a4 int 10 : int result 8 ;9 "+ile .10 : if .1 A ;10 result G8 a9 a BB8 19 GESL confidential C Interview questions 11 1 HH8 19 < return result9 < 333333333333333333333333333333333333333333333333333333 . !its siEe int main.0 : unsigne' c+ar i 8 ;9 int count 8 ;9 i 8 Di9 "+ile .i0 : i 8 i HH 19 countGG9 < printf.I J' KnI4 count09 e6it.EL>TCSMCCESS09 < 33333333333333333333333333333333333333333333333333333333 $. !its re-erse int 1itCre-.int num0 : unsigne' int temp 8 ;9 int i9 for .i 8 ..siEeof.num0 F *00 3 19 i9 i330 : temp 8 temp N .num A ;109 temp BB8 19 num HH8 19 < temp 8 temp N .num A ;109 return temp9 < 3333333333333333333333333333333333333333333333333333333333 %. !its count int fnC1its1.int num0 : int i9 for .i 8 ;9 num O8 ;9 num HH8 10 : if .num A 10 iGG9 < return i9 < GESL confidential C Interview questions 12 33333333333333333333333333333333333333333333333333333333333 (. atoi int atoiC1.c+ar strPQ0 : int i 8 ;9 "+ile .Fstr0 : i 8 .i BB 30 G .i BB 10 G .Fstr 3 /;/09 strGG9 < return i9 < 333333333333333333333333333333333333333333333333333333333333 *. Setting nt+ 1it. int setCfn.int num4 int pos0 : printf.I J' KnI4.num N8 .1 BB pos0009 return .num A8 .1 BB pos009 < 3333333333333333333333333333333333333333333333333333 R. po"er of 2 int po"eroft"o.int num0 : if.num A .num3100 return T&ME9 else return F2LSE9 < 3333333333333333333333333333333333333333333333333 1;. !yte 'isassem1ly input 7 $F output 7 ;$;F main.0 : int -al 8 ;6$f9 int mask 8 ;6;f9 int tmp 8 ;4 result 8 ;9 tmp 8 -al HH 9 tmp 8 tmp BB *9 -al 8 -al A mask9 -al 8 -al N tmp9 result 8 -al9 printf.IJ6KnI4 result09 GESL confidential C Interview questions 13 < 3333333333333333333333333333333333333 11.con-ert from one En'ian to anot+er. int myre-ersefunc.int num0 : int 1yte;4 1yte14 1yte24 1yte39 1yte; 8 .num A 6;;;;;;FF0 HH ; 9 1yte1 8 .num A 6;;;;FF;;0 HH * 9 1yte2 8 .num A 6;;FF;;;;0 HH 1% 9 1yte3 8 .num A 6FF;;;;;;0 HH 2 9 return..1yte; BB 20 N .1yte1 BB 1%0 N .1yte2 BB *0 N .1yte3 BB ;009 < 333333333333333333333333333333333333333333333333333 SSSSS Teneral programs SSSSSSSSSSSSSSSSSSSSS 1.pointer allocation S'efine &O, $ S'efine COL $ int main.0 : int FFFp9 int i4 ?9 p 8 .int FFF0 malloc.siEeof.intF009 for .i 8 ;9 i B &O,9 iGG0 pPiQ 8 .intFF0 malloc.siEeof.intF0 F COL09 for .i 8 ;9 i B &O,9 iGG0 for.? 8 ;9 ? B COL9 ?GG0 pPiQP?Q 8 .intF0 malloc.siEeof.int0 F &O, F COL09 < 3333333333333333333333333333333333333333333333333333 2. S"apping t"o num1ers -oi' s"ap3.int a4 int 10 : printf.Ia 8 J' 1 8 J' KnI4 a4 109 a 8 a G 19 1 8 a 3 19 a 8 a 3 19 printf.Ia 8 J' 1 8 J' KnI4 a4 109 < -oi' s"ap1.int a4 int 10 GESL confidential C Interview questions 1- : a@81@8a@819 printf.Ia 8 J' 1 8 J' KnI4 a4 109 < -oi' s"ap2.int a4 int 10 : a 8 a @ 19 1 8 a @ 19 a 8 a @ 19 printf.Ia 8 J' 1 8 J' KnI4 a4 109 < 3333333333333333333333333333333333333333333333333333 3. String re-erse -oi' re-erse.c+ar Fs0 : fnCre-erse.s4 ;4 strlen.s009 < -oi' fnCre-erse.c+ar sPQ4 int i4 int len0 : int c4 ?9 ? 8 len 3 .iG 109 if .i B ?0 : c 8 sPiQ9 sPiQ 8 sP?Q9 sP?Q 8 c9 fnCre-erse.s4 GGi4 len09 < < 333333333333333333333333333333333333333333333333333 . E-en or o'' num1ers S'efine C=ECU.60 ..6 A ;10 V ; 7 10 3333333333333333333333333333333333333333333333333333 $. !iggest of t"o num1ers S'efine M2L.a4 10 ...a0 H .100 V .a0 7 .100 333333333333333333333333333333333333333333333333333333333333 %. S'efine myisalnum.c0 ..c H8 /a/ AA c B8 /E/0NN.c H8 /2/ AA c B8 /W/0 NN . c H8 /;/ AA c B8 /R/00 V SMCCESS 7 F2>LM&E S'efine myisalp+a.c0 ..c H8 /a/ AA c B8 /E/0 NN .c H8 /2/ AA c B8 /W/00 V SMCCESS 7 F2>LM&E GESL confidential C Interview questions 11 S'efine myis'igit.c0 ..c H8 /;/ AA c B8 /R/00 V SMCCESS 7 F2>LM&E S'efine myis6'igit.C0 ..c H8 /;/ AA c B8 /R/0 NN .c H8 /a/ AA c B8 /E/0 NN .c H8 /2/ AA c B8 /W/00 V SMCCESS 7 F2>LM&E S'efine myisprint.c0 ..c H8 ;62;0 AA .c B8 ;6(E00 V SMCCESS 7 F2>LM&E S'efine myisupper.c0 .c H8 /2/ AA c B8 /W/0 V SMCCESS 7 F2>LM&E S'efine myiscntrl.c0 ...c H8 /K;/0 AA .c B8 ;61F00 NN .c 88 ;6(F00 V SMCCESS 7 F2>LM&E S'efine myislo"er.c0 .c H8 /a/ AA c B8 /E/0 V SMCCESS 7 F2>LM&E 333333333333333333333333333333333333333333333333333333333333333333333333333333 (. S'efine litC1ig.n0 .F.c+ar F0 An H8 10 V 1 7 ; S'efine litC1ig.n0 . F.c+ar F0 An0 V ; 7 1 S'efine larg.a414c4'0 ..a H 10 V ..a H c0 V ..a H '0 V a 7 '0 7 ..c H '0 V c 7 '00 7 ..1 H c0 V ..1 H '0 V 1 7 '0 7 ..c H '0 V c 7 '000 S'efine mysiEeof.60 ..int0.A6 G 10 3 .int0A60 S'efine mystrin'e6.s4t4i0 : K int ?4 k4 flag 8 ;9K for.i 8 ;9 sPiQ O8 /K;/9 iGG0 :K for.? 8 i4 k 8 ;9 tPkQ O8 /K;/ AA sP?Q 88 tPkQ9 ?GG4 kGG0K 9K if.k H ; AA tPkQ 88 /K;/0 : flag 8 19 1reak9 < K <K if.Oflag0 i 8 319 K <K 33333333333333333333333333333333333333333333333333333333333333333333 *. Factorial of a num1er int fact.int num0 : if .num 88 10 return 19 else return .num F fact.num 3 1009 < 33333333333333333333333333333333333333333333333333333 R. count lines4 "or's4 an' c+aracters in input main.0 : int c4 nl4 n"4 nc4 state9 state 8 OMT9 GESL confidential C Interview questions 15 nl 8 n" 8 nc 8 ;9 "+ile ..c 8 getc+ar.00 O8 EOF0 : GGnc9 if .c 88 /Kn/0 GGnl9 if .c 88 / / NN c 88 /Kn/ NN c 8 /Kt/0 state 8 OMT9 else if .state 88 OMT0 : state 8 >N9 GGn"9 < < printf.IJ' J' J'KnI4 nl4 n"4 nc09 < 33333333333333333333333333333333333333333333333333333333 R. String lengt+ int strlen.c+ar sPQ0 : int i9 "+ile .sPiQ O8 /K;/0 GGi9 return i9 < int strlen.c+ar Fs0 : int n9 for .n 8 ;9 Fs O8 /K;/4 sGG0 nGG9 return n9 < int strlen.c+ar Fs0 : c+ar Fp 8 s9 "+ile .Fp O8 /K;/0 pGG9 return p 3 s9 < 33333333333333333333333333333333333333333333333333333333 1;. lo"er7 con-ert c to lo"er case9 2SC>> only int lo"er.int c0 GESL confidential C Interview questions 19 : if .c H8 /2/ AA c B8 /W/0 return c G /a/ 3 /2/9 else return c9 < 333333333333333333333333333333333333333333333333333333 11. strcat7 concatenate t to en' of s9 s must 1e 1ig enoug+ -oi' strcat.c+ar sPQ4 c+ar tPQ0 : int i4 ?9 i 8 ? 8 ;9 "+ile .sPiQ O8 /K;/0 XF fin' en' of s FX iGG9 "+ile ..sPiGGQ 8 tP?GGQ0 O8 /K;/0 XF copy t FX 9 < 33333333333333333333333333333333333333333333333333333333 12. 1insearc+7 fin' 6 in -P;Q B8 -P1Q B8 ... B8 -Pn31Q int 1insearc+.int 64 int -PQ4 int n0 : int lo"4 +ig+4 mi'9 lo" 8 ;9 +ig+ 8 n 3 19 "+ile .lo" B8 +ig+0 : mi' 8 .lo"G+ig+0X29 if .6 B -Pmi'Q0 +ig+ 8 mi' G 19 else if .6 H -Pmi'Q0 lo" 8 mi' G 19 else XF foun' matc+ FX return mi'9 < return 319 XF no matc+ FX < 333333333333333333333333333333333333333333333333333 13. atoi7 con-ert s to integer int atoi.c+ar sPQ0 : int i4 n4 sign9 for .i 8 ;9 isspace.sPiQ09 iGG0 XF skip "+ite space FX 9 sign 8 .sPiQ 88 /3/0 V 31 7 19 GESL confidential C Interview questions 18 if .sPiQ 88 /G/ NN sPiQ 88 /3/0 XF skip sign FX iGG9 for .n 8 ;9 is'igit.sPiQ09 iGG0 n 8 1; F n G .sPiQ 3 /;/09 return sign F n9 < 333333333333333333333333333333333333333333333333333333 1. itoa -oi' re-erse.c+ar sPQ0 : int c4 i4 ?9 for .i 8 ;4 ? 8 strlen.s0319 i B ?9 iGG4 ?330 : c 8 sPiQ9 sPiQ 8 sP?Q9 sP?Q 8 c9 < < -oi' itoa.int n4 c+ar sPQ0 : int i4 sign9 if ..sign 8 n0 B ;0 XF recor' sign FX n 8 3n9 XF make n positi-e FX i 8 ;9 'o : XF generate 'igits in re-erse or'er FX sPiGGQ 8 n J 1; G /;/9 XF get ne6t 'igit FX < "+ile ..n X8 1;0 H ;09 XF 'elete it FX if .sign B ;0 sPiGGQ 8 /3/9 sPiQ 8 /K;/9 re-erse.s09 < 333333333333333333333333333333333333333333333333333333 1$. trim7 remo-e trailing 1lanks4 ta1s4 ne"lines int trim.c+ar sPQ0 : int n9 for .n 8 strlen.s0319 n H8 ;9 n330 if .sPnQ O8 / / AA sPnQ O8 /Kt/ AA sPnQ O8 /Kn/0 1reak9 sPnG1Q 8 /K;/9 return n9 GESL confidential C Interview questions 17 < 333333333333333333333333333333333333333333333333333333333333 1%. 5sort7 sort -PleftQ...-Prig+tQ into increasing or'er -oi' 5sort.int -PQ4 int left4 int rig+t0 : int i4 last9 -oi' s"ap.int -PQ4 int i4 int ?09 if .left H8 rig+t0 XF 'o not+ing if array contains FX return9 XF fe"er t+an t"o elements FX s"ap.-4 left4 .left G rig+t0X209 XF mo-e partition elem FX last 8 left9 XF to -P;Q FX for .i 8 left G 19 i B8 rig+t9 iGG0 XF partition FX if .-PiQ B -PleftQ0 s"ap.-4 GGlast4 i09 s"ap.-4 left4 last09 XF restore partition elem FX 5sort.-4 left4 last3109 5sort.-4 lastG14 rig+t09 < -oi' s"ap.int -PQ4 int i4 int ?0 : int temp9 temp 8 -PiQ9 -PiQ 8 -P?Q9 -P?Q 8 temp9 < 33333333333333333333333333333333333333333333333333333333333 1(. strcpy7 copy t to s9 array su1script -ersion -oi' strcpy.c+ar Fs4 c+ar Ft0 : int i9 i 8 ;9 "+ile ..sPiQ 8 tPiQ0 O8 /K;/0 iGG9 < -oi' strcpy.c+ar Fs4 c+ar Ft0 : int i9 i 8 ;9 "+ile ..Fs 8 Ft0 O8 /K;/0 : GESL confidential C Interview questions 24 sGG9 tGG9 < < -oi' strcpy.c+ar Fs4 c+ar Ft0 : "+ile ..FsGG 8 FtGG0 O8 /K;/0 9 < -oi' strcpy.c+ar Fs4 c+ar Ft0 : "+ile .FsGG 8 FtGG0 9 < 33333333333333333333333333333333333333333333333333333333 1*. strcmp7 return B; if sBt4 ; if s88t4 H; if sHt int strcmp.c+ar Fs4 c+ar Ft0 : int i9 for .i 8 ;9 sPiQ 88 tPiQ9 iGG0 if .sPiQ 88 /K;/0 return ;9 return sPiQ 3 tPiQ9 < int strcmp.c+ar Fs4 c+ar Ft0 : for . 9 Fs 88 Ft9 sGG4 tGG0 if .Fs 88 /K;/0 return ;9 return Fs 3 Ft9 < int strcmp.const c+ar F cs4const c+ar F ct0 : register signe' c+ar CCres9 "+ile .10 : if ..CCres 8 Fcs 3 FctGG0 O8 ; NN OFcsGG0 1reak9 < return CCres9 < GESL confidential C Interview questions 21 33333333333333333333333333333333333333333333333333333333333333 1R. 1insearc+7 fin' "or' in ta1P;Q...ta1Pn31Q int 1insearc+.c+ar F"or'4 struct key ta1PQ4 int n0 : int con'9 int lo"4 +ig+4 mi'9 lo" 8 ;9 +ig+ 8 n 3 19 "+ile .lo" B8 +ig+0 : mi' 8 .lo"G+ig+0 X 29 if ..con' 8 strcmp."or'4 ta1Pmi'Q."or'00 B ;0 +ig+ 8 mi' 3 19 else if .con' H ;0 lo" 8 mi' G 19 else return mi'9 < return 319 < 3333333333333333333333333333333333333333333333333333333333333333 2;. XFF F strnicmp 3 Case insensiti-e4 lengt+3limite' string comparison F Ys17 One string F Ys27 T+e ot+er string F Ylen7 t+e ma6imum num1er of c+aracters to compare FX int strnicmp.const c+ar Fs14 const c+ar Fs24 siEeCt len0 : XF Zes4 [irginia4 it +a' 1etter 1e unsigne' FX unsigne' c+ar c14 c29 c1 8 ;9 c2 8 ;9 if .len0 : 'o : c1 8 Fs19 c2 8 Fs29 s1GG9 s2GG9 if .Oc10 1reak9 if .Oc20 1reak9 if .c1 88 c20 continue9 c1 8 tolo"er.c109 c2 8 tolo"er.c209 GESL confidential C Interview questions 22 if .c1 O8 c20 1reak9 < "+ile .33len09 < return .int0c1 3 .int0c29 < 333333333333333333333333333333333333333333333333333333333 21.strncpy c+ar F strncpy.c+ar F 'est4const c+ar Fsrc4siEeCt count0 : c+ar Ftmp 8 'est9 "+ile .count33 AA .F'estGG 8 FsrcGG0 O8 /K;/0 XF not+ing FX9 return tmp9 < 333333333333333333333333333333333333333333333333333333333333 22. c+ar F strcat.c+ar F 'est4 const c+ar F src0 : c+ar Ftmp 8 'est9 "+ile .F'est0 'estGG9 "+ile ..F'estGG 8 FsrcGG0 O8 /K;/0 9 return tmp9 < 33333333333333333333333333333333333333333333333333333333 23. c+ar F strncat.c+ar F'est4 const c+ar Fsrc4 siEeCt count0 : c+ar Ftmp 8 'est9 if .count0 : "+ile .F'est0 'estGG9 "+ile ..F'estGG 8 FsrcGG00 : if .33count 88 ;0 : F'est 8 /K;/9 1reak9 < < < return tmp9 < 333333333333333333333333333333333333333333333333333333333333 2. GESL confidential C Interview questions 23 XFF F strc+r 3 Fin' t+e first occurrence of a c+aracter in a string F Ys7 T+e string to 1e searc+e' F Yc7 T+e c+aracter to searc+ for FX c+ar F strc+r.const c+ar F s4 int c0 : for.9 Fs O8 .c+ar0 c9 GGs0 if .Fs 88 /K;/0 return NMLL9 return .c+ar F0 s9 < 33333333333333333333333333333333333333333333333333333333 2$. XFF F strrc+r 3 Fin' t+e last occurrence of a c+aracter in a string F Ys7 T+e string to 1e searc+e' F Yc7 T+e c+aracter to searc+ for FX c+ar F strrc+r.const c+ar F s4 int c0 : const c+ar Fp 8 s G strlen.s09 'o : if .Fp 88 .c+ar0c0 return .c+ar F0p9 < "+ile .33p H8 s09 return NMLL9 < 3333333333333333333333333333333333333333333333333333333333 2%. siEeCt strnlen.const c+ar F s4 siEeCt count0 : const c+ar Fsc9 for .sc 8 s9 count33 AA Fsc O8 /K;/9 GGsc0 XF not+ing FX9 return sc 3 s9 < 333333333333333333333333333333333333333333333333333 2(. XFF F strspn 3 Calculate t+e lengt+ of t+e initial su1string of Ys "+ic+ only F contain letters in Yaccept F Ys7 T+e string to 1e searc+e' F Yaccept7 T+e string to searc+ for FX siEeCt strspn.const c+ar Fs4 const c+ar Faccept0 : const c+ar Fp9 const c+ar Fa9 GESL confidential C Interview questions 2- siEeCt count 8 ;9 for .p 8 s9 Fp O8 /K;/9 GGp0 : for .a 8 accept9 Fa O8 /K;/9 GGa0 : if .Fp 88 Fa0 1reak9 < if .Fa 88 /K;/0 return count9 GGcount9 < return count9 < 3333333333333333333333333333333333333333333333333333333333333333333333333 2*. XFF F strp1rk 3 Fin' t+e first occurrence of a set of c+aracters F Ycs7 T+e string to 1e searc+e' F Yct7 T+e c+aracters to searc+ for FX c+ar F strp1rk.const c+ar F cs4const c+ar F ct0 : const c+ar Fsc14Fsc29 for. sc1 8 cs9 Fsc1 O8 /K;/9 GGsc10 : for. sc2 8 ct9 Fsc2 O8 /K;/9 GGsc20 : if .Fsc1 88 Fsc20 return .c+ar F0 sc19 < < return NMLL9 < 33333333333333333333333333333333333333333333333333333333333333 2R. XFF F strtok 3 Split a string into tokens F Ys7 T+e string to 1e searc+e' F Yct7 T+e c+aracters to searc+ for F F ,2&N>NT7 strtok is 'eprecate'4 use strsep instea'. FX c+ar F CCCstrtok9 c+ar F strtok.c+ar F s4const c+ar F ct0 : c+ar Fs1egin4 Fsen'9 s1egin 8 s V s 7 CCCstrtok9 if .Os1egin0 : return NMLL9 GESL confidential C Interview questions 21 < s1egin G8 strspn.s1egin4ct09 if .Fs1egin 88 /K;/0 : CCCstrtok 8 NMLL9 return. NMLL 09 < sen' 8 strp1rk. s1egin4 ct09 if .sen' AA Fsen' O8 /K;/0 Fsen'GG 8 /K;/9 CCCstrtok 8 sen'9 return .s1egin09 < 33333333333333333333333333333333333333333333333333333333333333333 3;. XFF F strsep 3 Split a string into tokens F Ys7 T+e string to 1e searc+e' F Yct7 T+e c+aracters to searc+ for F F strsep.0 up'ates Ys to point after t+e token4 rea'y for t+e ne6t call. F F >t returns empty tokens4 too4 1e+a-ing e6actly like t+e li1c function F of t+at name. >n fact4 it "as stolen from gli1c2 an' 'e3fancy3fie'. F Same semantics4 slimmer s+ape. 90 FX c+ar F strsep.c+ar FFs4 const c+ar Fct0 : c+ar Fs1egin 8 Fs4 Fen'9 if .s1egin 88 NMLL0 return NMLL9 en' 8 strp1rk.s1egin4 ct09 if .en'0 Fen'GG 8 /K;/9 Fs 8 en'9 return s1egin9 < 33333333333333333333333333333333333333333333333333333 31. -oi' F memset.-oi' F s4int c4siEeCt count0 : c+ar F6s 8 .c+ar F0 s9 "+ile .count330 F6sGG 8 c9 return s9 < 333333333333333333333333333333333333333333333 GESL confidential C Interview questions 25 32. -oi' F memcpy.-oi' F 'est4const -oi' Fsrc4siEeCt count0 : c+ar Ftmp 8 .c+ar F0 'est4 Fs 8 .c+ar F0 src9 "+ile .count330 FtmpGG 8 FsGG9 return 'est9 < 33333333333333333333333333333333333333333333333333 33. -oi' F memmo-e.-oi' F 'est4const -oi' Fsrc4siEeCt count0 : c+ar Ftmp4 Fs9 if .'est B8 src0 : tmp 8 .c+ar F0 'est9 s 8 .c+ar F0 src9 "+ile .count330 FtmpGG 8 FsGG9 < else : tmp 8 .c+ar F0 'est G count9 s 8 .c+ar F0 src G count9 "+ile .count330 F33tmp 8 F33s9 < return 'est9 < 3333333333333333333333333333333333333333333333333333333333 3. int memcmp.const -oi' F cs4const -oi' F ct4siEeCt count0 : const unsigne' c+ar Fsu14 Fsu29 int res 8 ;9 for. su1 8 cs4 su2 8 ct9 ; B count9 GGsu14 GGsu24 count330 if ..res 8 Fsu1 3 Fsu20 O8 ;0 1reak9 return res9 < 333333333333333333333333333333333333333333333333333333333333333333 3$. XFF F memscan 3 Fin' a c+aracter in an area of memory. F Ya''r7 T+e memory area F Yc7 T+e 1yte to searc+ for GESL confidential C Interview questions 29 F YsiEe7 T+e siEe of t+e area. F F returns t+e a''ress of t+e first occurrence of Yc4 or 1 1yte past F t+e area if Yc is not foun' FX -oi' F memscan.-oi' F a''r4 int c4 siEeCt siEe0 : unsigne' c+ar F p 8 .unsigne' c+ar F0 a''r9 "+ile .siEe0 : if .Fp 88 c0 return .-oi' F0 p9 pGG9 siEe339 < return .-oi' F0 p9 < 3333333333333333333333333333333333333333333333333333333333333333333333 3%. XFF F strstr 3 Fin' t+e first su1string in a JNML terminate' string F Ys17 T+e string to 1e searc+e' F Ys27 T+e string to searc+ for FX c+ar F strstr.const c+ar F s14const c+ar F s20 : int l14 l29 l2 8 strlen.s209 if .Ol20 return .c+ar F0 s19 l1 8 strlen.s109 "+ile .l1 H8 l20 : l1339 if .Omemcmp.s14s24l200 return .c+ar F0 s19 s1GG9 < return NMLL9 < 33333333333333333333333333333333333333333333333333333333333333333333333 3(. XFF F memc+r 3 Fin' a c+aracter in an area of memory. F Ys7 T+e memory area F Yc7 T+e 1yte to searc+ for F Yn7 T+e siEe of t+e area. F F returns t+e a''ress of t+e first occurrence of Yc4 or JNMLL F if Yc is not foun' FX -oi' Fmemc+r.const -oi' Fs4 int c4 siEeCt n0 GESL confidential C Interview questions 28 : const unsigne' c+ar Fp 8 s9 "+ile .n33 O8 ;0 : if ..unsigne' c+ar0c 88 FpGG0 : return .-oi' F0.p3109 < < return NMLL9 < 333333333333333333333333333333333333333333333333333333333 3*. TC) int gc'.int m4 int n0 : "+ile.m O8 n0 XF !e in t+e loop till m A n are e5ual FX : if.m H n0 m 8 m 3 n9 else n 8 n 3 m9 < return m9 < int gc'.int m4 int n0 : int r9 "+ile.n O8 ;0 : r 8 m J n9 m 8 n9 n 8 r9 < return m9 < 33333333333333333333333333333333333333333333333 3R. Fi1onacci num1er ;4 14 14 24 34 $4 *4 134........... int fi1.int n0 : if.n 88 10 return ;9 if.n 88 20 return 19 return fi1.n 3 10 G fi1.n 3 209 GESL confidential C Interview questions 27 < int fi1.int n0 : int fPnG1Q9 fP1Q 8 fP2Q 8 19 printf.IKnfP1Q 8 J'I4 fP1Q09 printf.IKnfP2Q 8 J'I4 fP2Q09 for .int i 8 39 i B8 n9 iGG0 : fPiQ 8 fPi31Q G fPi32Q9 printf.IKnfPJ'Q 8 PJ'QI4i4fPiQ09 < return fPnQ9 < -oi' main.0 : printf.Ifi1 8 J'KnI4 n4 fi1.n009 < 333333333333333333333333333333333333333333333333333333333333333333333333 ;. &e-erse a num1er -oi' re-erse.int n0 : printf.IJ'I4 n J 1;09 if.n X 1; 88 ;0 return9 re-erse.n X 1;09 < 3333333333333333333333333333333333333333333333 1. &e-erse a linke' list. type'ef struct no'e : int -alue9 struct no'e Fne6t9 < myno'e9 -oi' iterati-eCre-erse.0 : myno'e Fp4 F54 Fr9 GESL confidential C Interview questions 34 if.+ea' 88 .myno'e F0;0 : return9 < p 8 +ea'9 5 8 p3Hne6t9 p3Hne6t 8 .myno'e F0;9 "+ile .5 O8 .myno'e F0;0 : r 8 53Hne6t9 53Hne6t 8 p9 p 8 59 5 8 r9 < +ea' 8 p9 < myno'eF re-erseCrecurse.myno'e Froot0 : if.root3Hne6tO8.myno'e F0;0 : re-erseCrecurse.root3Hne6t09 root3Hne6t3Hne6t8root9 return.root09 < else : +ea'8root9 < < 333333333333333333333333333333333333333333 2. #rogram to fin' prime num1er main.0 : int num4 tmp4 count4 i9
printf.Ienter t+e num1er to 1e c+ecke'I09 scanf.IJ'I4An09 for.i819iB8n9iGG0 : tmp 8 num J i9 if.tmp 8 ;0 : count G8 19 < <
if .count 88 20 GESL confidential C Interview questions 31 : printf.It+e gi-en num1er is primeI09 < else printf.It+e gi-en num1er is not primeI09 < 333333333333333333333333333333333333333333333 3. Fin' loop in a linke' list [isite' flag7 =a-e a -isite' flag in eac+ no'e of t+e linke' list. Flag it as -isite' "+en you reac+ t+e no'e. ,+en you reac+ a no'e an' t+e flag is alrea'y flagge' as -isite'4 t+en you kno" t+ere is a loop in t+e linke' list. Fastest met+o'7 =a-e 2 pointers to start of t+e linke' list. >ncrement one pointer 1y 1 no'e an' t+e ot+er 1y 2 no'es. >f t+ere/s a loop4 t+e 2n' pointer "ill meet t+e 1st pointer some"+ere. >f it 'oes4 t+en you kno" t+ere/s one. =ere is some co'e p8+ea'9 58+ea'3Hne6t9 "+ile.pO8NMLL AA 5O8NMLL0 : if.p8850 : XXLoop 'etecte'O e6it.;09 < p8p3Hne6t9 58.53Hne6t0V.53Hne6t3Hne6t0753Hne6t9 < XX No loop. 3333333333333333333333333333333333333333333333333333333 . S"apping a ni11les unsigne' c+ar s"apCni11les.unsigne' c+ar c0 : unsigne' c+ar temp14 temp29 temp1 8 c A ;6;F9 temp2 8 c A ;6F;9 temp18 temp1 BB 9 temp28 temp2 HH 9 return .temp2Ntemp109 XXa''ing t+e 1its < 333333333333333333333333333333333333333333333333333333 GESL confidential C Interview questions 32 $. float a83.19 float FFE9 float FFy9 float FFF69 float FFFF-9 float FFFF"9 float FFfun1.float F09 float FFFFfun2.float FFF09 main.0 : E 8 fun1.Aa09 printf.IJfI4 FFE09 < float FFfun1.float FE0 : y 8 AE9 - 8 func2.Ay09 return .FF-09 < float FFFFfun2.float FFF60 : " 8 A69 return ."09 < 33333333333333333333333333333333333333333333333 %. #ointers an' t"o 'imensional arrays stu'P$QP2Q 8 : :1234 $%<4 :12124 33<4 :134 *;<4 :13124 (*<4 :12;34 ($< <9 for.i 8 ;9 i B8 9 iGG0 : for.? 8 ;9 ? B8 19 ?GG0 : printf.IJ'I4 F.F.stu' G i0 G ?009 < < GESL confidential C Interview questions 33 aP3QPQ 8 : 1424344 $4%4(4*4 R4;414% <9 >f > call 'isplay.a4 34 0 or s+o".a4 34 09 'isplay.int F54 int ro"4 int col0 : for.i 8 ;9 i B ro"9 iGG0 : for.? 8 ;9 ? B col9 ?GG0 : printf.IJ'I4 F.5 G i F col G ?009 < < < s+o".int .F50PQ4 int ro" 4 int col0 : int Fp9 for.i 8 ;9 i B ro"9 iGG0 : p 8 5 G 19 for.? 8 ;9 ? B col9 ?GG0 : printf.IJ'I4 F.p G ?009 < < < print.int 5PQPQ4 int ro"4 int col09 3333333333333333333333333333333333333333333333333333333 (. T+ree )imensional arrays aP2QP3QP2Q 8 : : :24 <4 :(4 *<4 :34 <4 <4 : :24 2<4 :24 3<4 :34 <4 < <9 GESL confidential C Interview questions 3- >f > call 'isplay.a4 24 34 20 or s+o".a4 24 34 209 'isplay.int F54 int ii4 int ??4 int kk0 : for.i 8 ;9 iBii9 iGG0 : for.? 8 ;9 ? B??9 ?GG0 : for.k 8 ;9 k B kk9 kGG0 printf.IJ'I4 F.5 G i F ?? F kk G ? F kk G k009 < < < s+o".int .F50P3QPQ4 int ii4 int ??4 int kk0 : int Fp9 for.i 8 ;9 iBii9 iGG0 : for.? 8 ;9 ? B??9 ?GG0 : p 8 5PiQP?Q9 for.k 8 ;9 k B kk9 kGG0 printf.IJ'I4 F.5 G i F ?? F kk G ? F kk G k009 < < < print.int 5PQP3QP2Q4 int ii4 int ??4 int kk09 3333333333333333333333333333333333333333333333333333333333333 &eturning 2) array from function7 &O, 8 3 COL 8 int Fa9 int Ffun1.09 int Ffun1.0 : static int aP&O,QPCOLQ 8 : 14 24 34 4 $4 %4 (4 *4 R4 ;4 14 % <9 return .int F0a9 < int .F10PCOLQ9 GESL confidential C Interview questions 31 int .Ffun2.00PCOLQ9 int Fp9 int .Ffun2.00PCOLQ : static int 1P&O,QPCOLQ 8 : 14 24 34 4 $4 %4 (4 *4 R4 ;4 14 % <9 return 19 < int .Fc0P&O,QPCOLQ9 int .Ffun3.00:&O,QPCOLQ9 int .Ffun3.00P&O,QPCOLQ : static int cP&O,QPCOLQ 8 : 14 24 34 4 $4 %4 (4 *4 R4 ;4 14 % <9
return .int.F0P&O,QPCOLQ0 c9 < 333333333333333333333333333333333333333333333333333333333 &eturning 3) array from function7 SET 8 2 &O, 8 3 COL 8 int Fa9 int Ffun1.09 int Ffun1.0 : static int aPSETQP&O,QPCOLQ 8 : 14 24 34 4 $4 %4 (4 *4 R4 ;4 14 % <9 return .int F0a9 < int .F10PCOLQ9 int .Ffun2.00PCOLQ9 int Fp9 int .Ffun2.00PCOLQ : static int 1PSETQP&O,QPCOLQ 8 : 14 24 34 4 $4 %4 (4 *4 R4 ;4 14 % GESL confidential C Interview questions 35 <9 return .int.F0PCOLQ0 19 < int .Fc0P&O,QPCOLQ9 int .Ffun3.00:&O,QPCOLQ9 int .Ffun3.00P&O,QPCOLQ : static int cPSETQP&O,QPCOLQ 8 : 14 24 34 4 $4 %4 (4 *4 R4 ;4 14 % <9
return .int.F0P&O,QPCOLQ0 c9 < int .F'0PSETQP&O,QPCOLQ9 int .Ffun.00PSETQP&O,QPCOLQ9 int .Ffun.00PSETQP&O,QPCOLQ : static int cPSETQP&O,QPCOLQ 8 : 14 24 34 4 $4 %4 (4 *4 R4 ;4 14 % <9 return .int .F0PSETQP&O,QPCOLQ0'9 < 3333333333333333333333333333333333333333333333333333 c+ar str1PQ 8 I=elloI9 c+ar str2P1;Q9 c+ar Fs 8 IToo' morningI9 c+ar F59 str2 8 str19 XF error FX 5 8 s9 XF "orks FV 333333333333333333333333333 c+ar Fp 8 I=elloI 9 XF pointer is -aria1le4 so is string FX F# 8 /M/9 XF "orks FX p 8 I!yeI9 XF "orks FX const c+ar F5 8 I=elloI9 XF string is constant pointer is not FX F5 8 /M/9 XF error FX 5 8 I!yeI9 XF "orks FX c+ar const Fs 8 I=elloI 9 XF string is constant pointer is not FX Fs 8 /M/9 XF error FX s 8 I!yeI9 XF "orks FX GESL confidential C Interview questions 39 c+ar Fconst t 8 I=elloI9 XF pointer is constant string is not FX Ft 8 /M/9 XF "orks FX t 8 I!yeI9 XF error FX const c+ar F const u 8 I=elloI9 XF string is constant 4 so is pointer FX Fu 8 /M/9 XF error FX u 8 I!yeI9 XF error FX 333333333333333333333333333333333333333333333 2rray of pointer to strings7 c+ar FnamesPQ 8 : Igiris+I4 Ima+es+I4 Ira-iI4 IarunI4 IgopalI <9 333333333333333333333333333333333333333333333 333333333333333333333333333333333333333333333333333 SSSSSSSSS Function pointers SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS Function #ointers are pointers4 i.e. -aria1les4 "+ic+ point to t+e a''ress of a function. XF function returning pointer to int FX int Ffunc.int a4 float 109 XF pointer to function returning int FX int .Ffunc0.int a4 float 109 Zou can call t+e function using one of t"o forms7 .Ffunc0.14209 XF or FX func.14209 33333333333333333333333333333333333 -oi' func.int09 main.0: -oi' .Ffp0.int09 fp 8 func9 .Ffp0.109 fp.209 e6it.EL>TCSMCCESS09 < -oi' func.int arg0: printf.IJ'KnI4 arg09 GESL confidential C Interview questions 38 < 33333333333333333333333333333333 you can +a-e an array of pointers to functions4 "it+ 'eclaration an' use like t+is7 -oi' .FfparrPQ0.int4 float0 8 : XF initialiEers FX <9 XF t+en call one FX fparrP$Q.14 3.09 333333333333333333333333333333333333333 type'ef -oi' .Ffn0.-oi'09 -oi' a.0 : printf.I=> 222KnI09 < int main.0 : fn fun9 fun 8 a9 fun.09 printf.I => KnI09 e6it.EL>TCSMCCESS09 < 333333333333333333333333333333333333 int .Ffun0.int4 int09 int a''.int a4 int 10 : return a G 19 < int su1.int a4 int 10 : return a 3 19 < int function.int .Ffun0 .int4 int04 int 64 int y0 : return fun.64 y09 < int main.0 : printf.I a'' 8 J' KnI4 function.a''4 1;4 2;009 printf.I su1 8 J' KnI4 function.su14 1;4 2;009 e6it.EL>TCSMCCESS09 < 333333333333333333333333333333333333333333333333333 GESL confidential C Interview questions 37 type'ef int .Ffun0.int4 int09 int a''.int a4 int 10 : return a G 19 < int su1.int a4 int 10 : return a 3 19 < int function.fun fun14 int 64 int y0 : return fun1.64 y09 < int main.0 : printf.I a'' 8 J' KnI4 function.a''4 1;4 2;009 printf.I su1 8 J' KnI4 function.su14 1;4 2;009 e6it.EL>TCSMCCESS09 < 3333333333333333333333333333333333333333333333333333333 type'ef -oi' .Ffun0.c+ar strPQ09 -oi' fnCre-.c+ar strPQ09 int main.0 : c+ar strP1;Q9 fun fun19 printf.I Enter name KnI09 scanf.IJsI4 str09 fun1 8 fnCre-9 .Ffun10.str09 printf.I string 8 Js KnI4 str09 e6it.EL>TCSMCCESS09 < -oi' fnCre-.c+ar strPQ0 : int c4 i4 ?9 for .i 8 ;4 ? 8 strlen.str0 3 19 i B ?9 iGG4 ?330 : c 8 strPiQ9 strPiQ 8 strP?Q9 strP?Q 8 c9 < < 3333333333333333333333333333333333333333333333333 int sum.int a4 int 109 GESL confidential C Interview questions -4 int su1tract.int a4 int 109 int mul.int a4 int 109 int 'i-.int a4 int 109 int .FpPQ0 .int 64 int y09 or XF initialiEe t+e pointer array FX int .FpPQ0 .int 64 int y0 8 : sum4 su1tract4 mul4 'i- < 9 int main.-oi'0 : int result9 int i4 ?4 op9 pP;Q 8 sum9 XF a''ress of sum.0 FX pP1Q 8 su1tract9 XF a''ress of su1tract.0 FX pP2Q 8 mul9 XF a''ress of mul.0 FX pP3Q 8 'i-9 XF a''ress of 'i-.0 FX printf.IEnter t"o num1ers7 I09 scanf.IJ' J'I4 Ai4 A?09
printf.I;7 2''4 17 Su1tract4 27 Multiply4 37 )i-i'eKnI09 'o : printf.IEnter num1er of operation7 I09 scanf.IJ'I4 Aop09 < "+ile.opB; NN opH309 result 8 .FpPopQ0 .i4 ?09 printf.IJ'I4 result09 return ;9 < 33333333333333333333333333333333333333333333333333333333333333 -oi' c+eck.c+ar Fa4 c+ar F14int .Fcmp0.const c+ar F4 const c+ar F009 int main.-oi'0 : c+ar s1P*;Q8 Ias'fI4 s2P*;Q8Ias'fI9 int .Fp0.const c+ar F4 const c+ar F09 p 8 strcmp9 c+eck.s14 s24 p09 return ;9 < GESL confidential C Interview questions -1 -oi' c+eck.c+ar Fa4 c+ar F14int .Fcmp0.const c+ar F4 const c+ar F00 : printf.ITesting for e5uality.KnI09 if.O.Fcmp0.a4 100 : printf.IE5ualI09 <else : printf.INot E5ualI09 < < 33333333333333333333333333333333333333333333333333333333333333333 c+ar FFarg- arg-7 pointer to c+ar int .F'ayta10P13Q 'ayta17 pointer to arrayP13Q of int int F'ayta1P13Q 'ayta17 arrayP13Q of pointer to int -oi' Fcomp.0 comp7 function returning pointer to -oi' -oi' .Fcomp0.0 comp7 pointer to function returning -oi' c+ar .F.F6.00PQ0.0 67 function returning pointer to arrayPQ of pointer to function returning c+ar c+ar .F.F6P3Q0.00P$Q 67 arrayP3Q of pointer to function returning pointer to arrayP$Q of c+ar 33333333333333333333333333333333333333333333333333333333333333333 SSSSSSSSSS [arargs SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS Sinclu'e Bst'io.+H Sinclu'e Bst'arg.+H e6tern c+ar Fitoa.int4 c+ar F4 int09 -oi' myprintf.const c+ar Ffmt4 ...0 : const c+ar Fp9 -aClist argp9 int i9 c+ar Fs9 c+ar fmt1ufP2$%Q9 -aCstart.argp4 fmt09 for.p 8 fmt9 Fp O8 /K;/9 pGG0 : GESL confidential C Interview questions -2 if.Fp O8 /J/0 : putc+ar.Fp09 continue9 < s"itc+.FGGp0 : case /c/7 i 8 -aCarg.argp4 int09 putc+ar.i09 1reak9 case /'/7 i 8 -aCarg.argp4 int09 s 8 itoa.i4 fmt1uf4 1;09 fputs.s4 st'out09 1reak9 case /s/7 s 8 -aCarg.argp4 c+ar F09 fputs.s4 st'out09 1reak9 case /6/7 i 8 -aCarg.argp4 int09 s 8 itoa.i4 fmt1uf4 1%09 fputs.s4 st'out09 1reak9 case /J/7 putc+ar./J/09 1reak9 < < -aCen'.argp09 < 13H -aClist argp9 T+is line 'eclares a -aria1le4 argp 23H -aCstart.argp4 fmt09 T+is line initialiEes argp an' initiates t+e processing of t+e argument list 33H -aCarg.0 fetc+es t+e ne6t argument from t+e argument list. 3H -aCen'.04 "+ic+ performs any necessary cleanup 333333333333333333333333333333333333333333333333333333333333333333333333 SSSSSSSSSSSS Call1ack routine SSSSSSSSSSSSSSSSSSSSS GESL confidential C Interview questions -3 2 call1ack routine is a routine .function or proce'ure0 in your program t+at ,in'o"s calls. More generally4 a call1ack is a means of sen'ing a function as a parameter into anot+er function. ,+en t+e call1ack function +as complete'4 control is passe' 1ack to t+e original function. 33333333333333333333333333333333333333333333333 >n computer programming4 a call1ack is e6ecuta1le co'e t+at is passe' as an argument to ot+er co'e. >t allo"s a lo"er3le-el soft"are layer to call a function 'efine' in a +ig+er3le-el layer.Msually4 t+e +ig+er3le-el co'e starts 1y calling a function "it+in t+e lo"er3le-el co'e passing to it a pointer or +an'le to anot+er function. ,+ile t+e lo"er3le-el function e6ecutes4 it may call t+e passe'3in function any num1er of times to perform some su1task. >n anot+er scenario4 t+e lo"er3le-el function registers t+e passe'3in function as a +an'ler t+at is to 1e calle' async+ronously 1y t+e lo"er3 le-el at a later time in reaction to somet+ing. 2 call1ack can 1e use' as a simpler alternati-e to polymorp+ism an' generic programming4 in t+at t+e e6act 1e+a-ior of a function can 1e 'ynamically 'etermine' 1y passing 'ifferent .yet compati1le0 function pointers or +an'les to t+e lo"er3le-el function. T+is can 1e a -ery po"erful tec+ni5ue for co'e reuse. Call1ack functions separate t+e caller from t+e callee4 t+e caller 'oes/nt care "+o t+e callee is 3333333333333333333333333333333333333333333333333333 SSSSSSSSSS &eentrant co'e SSSSSSSSSSSSSSSSSSSS 2 programming routine t+at can 1e use' 1y multiple programs simultaneously. >t is use' in operating systems an' ot+er system soft"are as "ell as in multit+rea'ing4 "+ere concurrent e-ents are taking place. >t is "ritten so t+at none of its co'e is mo'ifia1le .no -alues are c+ange'0 an' it 'oes not keep track of anyt+ing. T+e calling programs keep track of t+eir o"n progress .-aria1les4 flags4 etc.04 t+us one copy of t+e reentrant routine can 1e s+are' 1y any num1er of users or processes. Conceptually4 it is as if se-eral people "ere eac+ 1aking a cake from a single copy of a recipe on t+e "all. E-eryone looks at t+e master recipe4 1ut keeps track of t+eir o"n progress 1y ?otting 'o"n t+e step t+ey are at on t+eir o"n scratc+pa' so t+ey can pick up "+ere t+ey left off. T+e master recipe is ne-er 'istur1e'. 3333333333333333333333333333333333333333333333333 GESL confidential C Interview questions -- 2 computer program or routine is 'escri1e' as reentrant if it can 1e safely e6ecute' concurrently9 t+at is4 t+e routine can 1e re3entere' "+ile it is alrea'y running. To 1e reentrant4 a function must +ol' no static non3constant 'ata4 must not return t+e a''ress to static non3constant 'ata4 must "ork only on t+e 'ata pro-i'e' to it 1y t+e caller4 must not rely on locks to singleton resources4 an' must not call non3reentrant functions. Multiple le-els of /userXo1?ectXprocess priority/ an'Xor multiprocessing usually complicate t+e control of reentrant co'e. 2lso4 >O co'e is usually not reentrant 1ecause it relies on s+are'4 singleton resources suc+ as 'isks. 3333333333333333333333333333333333333333333 >n t+e follo"ing piece of C co'e4 neit+er functions f nor g are reentrant. int gC-ar 8 19 int f.0 : gC-ar 8 gC-ar G 29 return gC-ar9 < int g.0 : return f.0 G 29 < int main.0 : g.09 return ;9 < 33333333333333333333333333333333333333333 T+ese slig+tly3altere' -ersions are reentrant7 int f.int i0 : int pri- 8 i9 pri- 8 pri- G 29 return pri-9 < int g.int i0 : int pri- 8 i9 return f.pri-0 G 29 < int main.0 : g.109 return ;9 < GESL confidential C Interview questions -1 333333333333333333333333333333333333 &e3entrant co'e is co'e "ritten to safely allo" more t+an one t+rea' of control to access it at once. T+is mainly occurs in multi3t+rea'e' situations4 suc+ as in ser-er3si'e co'e t+at may 1e s+are' 1y multiple remote users. To make co'e safely re3entrant takes a lot of care4 an' usually re5uires t+e use of locking tec+ni5ues to pre-ent t+rea's mo'ifying local 'ata .e.g. -aria1les0 in use 1y anot+er t+rea'4 or t+e a-oi'ance 3333333333333333333333333333333333333333333333333333 2 reentrant function 'oes not +ol' static 'ata o-er successi-e calls4 nor 'oes it return a pointer to static 'ata. 2ll 'ata is pro-i'e' 1y t+e caller of t+e function. 2 reentrant function must not call non3reentrant functions. T+e use of glo1al 'ata is t+rea'3unsafe. >t s+oul' 1e maintaine' per t+rea' or encapsulate'4 so t+at its access can 1e serialiEe'.
Many non3reentrant functions return a pointer to static 'ata. T+is can 1e a-oi'e' in t"o "ays7 &eturning 'ynamically allocate' 'ata. >n t+is case4 it "ill 1e t+e caller/s responsi1ility to free t+e storage. T+e 1enefit is t+at t+e interface 'oes not nee' to 1e mo'ifie'. =o"e-er4 1ack"ar' compati1ility is not ensure'9 e6isting single3t+rea'e' programs using t+e mo'ifie' functions "it+out c+anges "oul' not free t+e storage4 lea'ing to memory leaks. Msing caller3pro-i'e' storage. T+is met+o' is recommen'e'4 alt+oug+ t+e interface nee's to 1e mo'ifie'. 33333333333333333333333333333333333333333333333333333333333333333333333333333333333 SSSS gco- 3 co-erage testing tool SSSSSSSS gco- is a test co-erage program. Mse it in concert "it+ TCC to analyEe your programs to +elp create more efficient4 faster running co'e. Zou can use gco- as a profiling tool to +elp 'isco-er "+ere your optimiEa3 tion efforts "ill 1est affect your co'e. Zou can also use gco- along "it+ t+e ot+er profiling tool4 gprof4 to assess "+ic+ parts of your co'e use t+e greatest amount of computing time. #rofiling tools +elp you analyEe your co'e\s performance. Msing a pro3 filer suc+ as gco- or gprof4 you can fin' out some 1asic performance statistics4 suc+ as7 ]^ +o" often eac+ line of co'e e6ecutes ]^ "+at lines of co'e are actually e6ecute' ]^ +o" muc+ computing time eac+ section of co'e uses Once you kno" t+ese t+ings a1out +o" your co'e "orks "+en compile'4 you can look at eac+ mo'ule to see "+ic+ mo'ules s+oul' 1e optimiEe'. gco- +elps you 'etermine "+ere to "ork on optimiEation. Soft"are 'e-elopers also use co-erage testing in concert "it+ test3 suites4 to make sure soft"are is actually goo' enoug+ for a release. GESL confidential C Interview questions -5 Testsuites can -erify t+at a program "orks as e6pecte'9 a co-erage pro3 gram tests to see +o" muc+ of t+e program is e6ercise' 1y t+e test3 suite. )e-elopers can t+en 'etermine "+at kin's of test cases nee' to 1e a''e' to t+e testsuites to create 1ot+ 1etter testing an' a 1etter final pro'uct. Zou s+oul' compile your co'e "it+out optimiEation if you plan to use gco- 1ecause t+e optimiEation4 1y com1ining some lines of co'e into one function4 may not gi-e you as muc+ information as you nee' to look for \+ot spots\ "+ere t+e co'e is using a great 'eal of computer time. Like"ise4 1ecause gco- accumulates statistics 1y line .at t+e lo"est resolution04 it "orks 1est "it+ a programming style t+at places only one statement on eac+ line. >f you use complicate' macros t+at e6pan' to loops or to ot+er control structures4 t+e statistics are less +elp3 ful333t+ey only report on t+e line "+ere t+e macro call appears. >f your comple6 macros 1e+a-e like functions4 you can replace t+em "it+ inline functions to sol-e t+is pro1lem. gco- creates a logfile calle' sourcefile.gco- "+ic+ in'icates +o" many times eac+ line of a source file sourcefile.c +as e6ecute'. Zou can use t+ese logfiles along "it+ gprof to ai' in fine3tuning t+e perfor3 mance of your programs. gprof gi-es timing information you can use along "it+ t+e information you get from gco-. gco- "orks only on co'e compile' "it+ TCC. >t is not compati1le "it+ any ot+er profiling or test co-erage mec+anism. _ gcc 3fprofile3arcs 3ftest3co-erage tmp.c _ a.out _ gco- tmp.c *(.$;J of * source lines e6ecute' in file tmp.c Creating tmp.c.gco-. _ -i tmp.c.gco- 333333333333333333333333333333333333333333333333333333333333333333333333 SSSSS [algrin' SSSSSSSSS _-algrin' 3- 33tool8memc+eck 33leak3c+eck8full 33log3file8logfile.t6t .Xa.out SSSSS =o" to take patc+ SSSS _'iff 3Naur1! orgC'ir mo'C'ir H result.patc+ 33333333333333333333333333333333333333333333333333333333333333333333 SSSSS Make SSSSSSSSSSSSSS prog1 7 file1.o file2.o file3.o CC 3o prog1 file1.o file2.o file3.o file1.o 7 file1.cc my'efs.+ GESL confidential C Interview questions -9 CC 3c file1.cc file2.o 7 file2.cc my'efs.+ CC 3c file2.cc file3.o 7 file3.cc CC 3c file3.cc clean 7 rm file1.o file2.o file3.o 33333333333333333333333333333333333333333333333333333333 O!`S 8 file1.o file2.o file3.o prog1 7 _.O!`S0 CC 3o prog1 _.O!`S0 file1.o 7 file1.cc my'efs.+ CC 3c file1.cc file2.o 7 file2.cc my'efs.+ CC 3c file2.cc file3.o 7 file3.cc CC 3c file3.cc clean 7 rm _.O!`S0 333333333333333333333333333333333333333333 O!`S 8 file1.o file2.o file3.o prog1 7 _:O!`S< _:CLL< 3o _Y _:O!`S< file1.o file2.o 7 my'efs.+ clean 7 rm _:O!`S< 3333333333333333333333333333333333333333333333333333333333 make 3H use t+e 'efault 'escriptor file4 1uil' t+e first target in t+e file make myprog 3H use t+e 'efault 'escriptor file4 1uil' t+e target myprog make 3f mymakefile 3H use t+e file mymakefile as t+e 'escriptor file4 1uil' t+e first target in t+e file make 3f mymakefile 3H myprog use t+e file mymakefile as t+e 'escriptor file4 1uil' t+e target myprog 33333333333333333333333333333333333333333333333333333333333333333 L>!S 8 3lm O!`S 8 file1.o file2.o _.moreCo1?s0 moreCo1?s 8 file3.o CLL 8 CC )E!MTCFL2T 8 S assign 3g for 'e1ugging GESL confidential C Interview questions -8 prog1 7 _:o1?s< _:CLL< _.)E!MTCFL2T0 3o prog1 _:o1?s< _:L>!S< 33333333333333333333333333333333333333333333333333333333 .cc.o7 _.CLL0 _.CLLFL2TS0 3c _B 3333333333333333333333333333333333333 SS 2 simple makefile CC 8 gcc CFL2TS 8 3g 3>XusrXclassXcs1;(Xinclu'e L)FL2TS 8 3LXusrXclassXcs1;(Xli1 3lgrap+ #&OT 8 program =)&S 8 1inky.+ ak1ar.+ 'efs.+ S&CS 8 main.c 1inky.c ak1ar.c SS T+is incantation says t+at t+e o1?ect files SS +a-e t+e same name as t+e .c files4 1ut "it+ .o O!`S 8 _.S&CS7.c8.o0 SS T+is is t+e first rule .t+e 'efault0 SS !uil' t+e program from t+e t+ree .o/s _.#&OT0 7 _.O!`S0 _.CC0 _.L)FL2TS0 _.O!`S0 3o _.#&OT0 main.o 7 main.c 1inky.+ ak1ar.+ 'efs.+ 1inky.o 7 1inky.c 1inky.+ ak1ar.o 7 ak1ar.c ak1ar.+ 'efs.+ clean 7 rm 3f core _.#&OT0 _.O!`S0 T2TS 7 _.S&CS0 _.=)&S0 etags 3t _.S&CS0 _.=)&S0 333333333333333333333333333333333333333333333333333333333333333333333333 .#=ONZ7clean CFL2TS G8 3,all 3g 3o2 O!` 8 1.o 2.o 3.o OMT#MT 8 result _.OMT#MT0 7 _.O!`0 gcc 3o _Y _@ GESL confidential C Interview questions -7 clean7 rm 3rf _.O!`0 _.OMT#MT0 333333333333333333333333333333333333333333333333333 SSSSSSS T)! SSSSSSSSSSSSSSSSSSSSS _gcc 3g giri.c _g'1 a.out +elp 3H to 'isplay a list of g'1 comman's
+elp comman' 3H to get +elp on a specifie' g'1 comman' run 3H to runXe6ecute t+e program starting from t+e 1eginning continue 3H to resume runningXe6ecuting t+e program ne6t 3H to e6ecute t+e current statement an' stop at t+e ne6t statement step 3H same as ne6t4 1ut step into a function list 66 3H list source lines starting at line 66 list 3H to list t+e ne6t source lines list 664yy 3H to list sources lines from line 66 to line yy list filename766 3H to list source lines in t+e specifie' file starting at line 66 5uit 3H to 5uit g'1 an' re-ert to t+e uni6 comman' le-el 1reak functionname 3H to set a 1reakpoint at t+e start of a function 1reak filename766 3H to set a 1reakpoint at line 66 in t+e specifie' file 1reak 66 3H to set a 1reakpoint at line 66 in t+e current file 1reak 1 3H to set a 1reakpoint at t+e first line in t+e current file .'eclaration or e6ecuta1le statement0 info 1reak 3H to list all 1reakpoints .inclu'ing t+ose 'isa1le'09 1reakpoints are num1ere' S14 S24 S34 etc. 'isa1le 66 3H to 'isa1le 1reakpoint S66 ena1le 66 3H to ena1le 1reakpoint S66 print -1 3H to print t+e -alue of a specifie' -aria1le GESL confidential C Interview questions 14 info source 3H to s+o" t+e name of t+e current source file info sources 3H to list t+e name of all source files in use set -aria1le 8 -alue 3H to assign a ne" -alue to a specifie' -aria1le .return0 3H to re3e6ecute t+e pre-ious g'1 comman'9 t+is is particularly useful if t+e pre-ious g'1 comman' "as ne6t or step 333333333333333333333333333333333333333333333333333333333333333333333333333333333 )ifference 1et"een Type'ef an' S'efine7 Type'ef 3333333333 1. +an'le' 1y c compliler an' is an actual 'efinition of a ne" type. 2.type'ef 'eclaration 'oes not create a ne" type in any sense9 it merely a''s a ne" name for some e6isting type.type'ef 'eclaration 'oes not create a ne" type in any sense9 it merely a''s a ne" name for some e6isting type. S'efine 333333333333 1. +an'le' 1y preprocessor an' "orks like replacement.
2. S'efine creates a ne" name in t+e te6t t+at "ill 1e processe' into C source co'e4 "+ile type'ef creates a ne" name into C source co'e itself. For e6ample4 type'ef c+ar FStringCt9 S'efine StringC' c+ar F StringCt s14 s29 StringC' s34 s9 s14 s24 an' s3 are all 'eclare' as c+ar F4 1ut s is 'eclare' as a c+ar4 "+ic+ is pro1a1ly not t+e intention. 33333333333333333333333333333333333333333333333333333333333333333333333333333333 C program Limits7 3 ;R$ e6ternal i'entifiers in one translation unit a $11 i'entifiers "it+ 1lock scope 'eclare' in one 1lock a ;R$ macro i'entifiers simultaneously 'efine' in one preprocessing translation unit a 12( parameters in one function 'efinition GESL confidential C Interview questions 11 a 12( arguments in one function call a 12( parameters in one macro 'efinition a 12( arguments in one macro in-ocation a ;R$ c+aracters in a logical source line a ;R$ c+aracters in a c+aracter string literal or "i'e string literal .after concatenation0 a %$$3$ 1ytes in an o1?ect .in a +oste' en-ironment only0 a 1$ nesting le-els for Sinclu'e' files a 1;23 case la1els for a s"itc+ statement .e6clu'ing t+ose for any neste' s"itc+ statements0 a 1;23 mem1ers in a single structure or union a 1;23 enumeration constants in a single enumeration a %3 le-els of neste' structure or union 'efinitions in a single struct3 'eclaration3list 333333333333333333333333333333333333333333333333333333333333333333333333333 )ifferece 1et"een ne" an' malloc7 malloc7 1. malloc re5uires a special ItypecastingI "+en it allocates memory. 2. free is t+e key"or' use' to free t+e memory "+ile using malloc. 3. malloc is a C function "+ic+ "ill allocate t+e amount of memory you ask an' t+ats it. . free is a C function "+ic+ "ill free up t+e memory allocate'. $. malloc can fail4 an' returns a NMLL pointer if memory is e6+auste'. ne"7 1. ne" 'oes not re5uires any typecasting. 2. 'elete t+e key"or' to free memory "+ile using ne". 3. ne" is a CGG operator "+ic+ "ill allocate memory 2N) call t+e constructor of t+e class for "+ic+/s o1?ect memory is 1eing allocate'. . 'elete is a CGG operator "+ic+ "ill free up t+e allocate' memory 2N) call t+e 'estructor of t+e o1?ect. $. Operator ne" ne-er returns a NMLL pointer4 1ut in'icates failure 1y t+ro"ing an e6ception instea'. 33333333333333333333333333333333333333333333333333333333333333333333333333 )ifferece 1et"een mute6 an' semap+ore7 mute67 1. Mute6es are typically use' to serialise access to a section of re3entrant co'e t+at cannot 1e e6ecute' concurrently 1y more t+an one t+rea'. 2. Mute6es are typically use' to serialise access to a section of re3entrant co'e GESL confidential C Interview questions 12 t+at cannot 1e e6ecute' concurrently 1y more t+an one t+rea'. 3. 2 mute6 is really a semap+ore "it+ -alue 1. semap+ore7 1. 333333333333333333333333333333333333333333333333333333 )ifference 1et"een Static an' 'ynamic li1rary. static7 1. Static li1raries are simply a collection of or'inary o1?ect files. 2. static li1raries en' "it+ t+e bb.a// suffi6. 3. Static li1raries permit users to link to programs "it+out +a-ing to recompile its co'e4 sa-ing recompilation time. . T+e program runs faster. $. T+e program takes more memory.T+is is 1ecause linking to static li1raries inclu'es t+e actual co'e for t+e li1rary function.s0Xproce'ure.s0 "it+ t+e e6ecuta1le4 %. steps7 _ cc 3c a''.c su1.c mul.c _ ar rcs myCli1rary.a a''.o su1.o mul.o a static li1rary or statically3linke' li1rary is a set of routines4 e6ternal functions an' -aria1les "+ic+ are resol-e' in a caller at compile3time an' copie' into a target application 1y a compiler4 linker4 or 1in'er4 pro'ucing an o1?ect file an' a stan'3alone e6ecuta1le. T+is e6ecuta1le an' t+e process of compiling it are 1ot+ kno"n as a static 1uil' of t+e program. Static li1raries are eit+er merge' "it+ ot+er static li1raries an' o1?ect files 'uring 1uil'ingXlinking to form a single e6ecuta1le4 or t+ey may 1e loa'e' at run3 time into t+e a''ress space of t+e loa'e' e6ecuta1le at a static memory offset 'etermine' at compile3timeXlink3time. s+are'7 1. S+are' li1raries are li1raries t+at are loa'e' 1y programs "+en t+ey start. 2. 1. steps7 _ cc 3F#>C 3c a''.c su1.c mul.c _ cc 3s+are' 3o myli1.so a''.o su1.o mul.o )ynamic linking means t+at t+e su1routines of a li1rary are loa'e' into an application program at runtime4 rat+er t+an 1eing linke' in at compile time4 an' remain as separate files on 'isk. Only a minimal amount of "ork is 'one at compile time 1y t+e linker9 it only recor's "+at li1rary routines t+e program nee's an' t+e in'e6 names or num1ers of t+e routines in t+e li1rary. T+e ma?ority of t+e "ork of linking is 'one at t+e GESL confidential C Interview questions 13 time t+e application is loa'e' .loa'time0 or 'uring e6ecution .runtime0. T+e necessary linking co'e4 calle' a loa'er4 is actually part of t+e un'erlying operating system. 2t t+e appropriate time t+e loa'er fin's t+e rele-ant li1raries on 'isk an' a''s t+e rele-ant 'ata from t+e li1raries to t+e process/s memory space. Some operating systems can only link in a li1rary at loa'time4 1efore t+e process starts e6ecuting9 ot+ers may 1e a1le to "ait until after t+e process +as starte' to e6ecute an' link in t+e li1rary ?ust "+en it is actually reference' .i.e.4 'uring runtime0. T+e latter is often calle' I'elay loa'ingI. >n eit+er case4 suc+ a li1rary is calle' a 'ynamically linke' li1rary. 'ynamic loa'e' li1raries7 1.)ynamically loa'e' .)L0 li1raries are li1raries t+at are loa'e' at times ot+er t+an 'uring t+e startup of a program. Sinclu'e B'lfcn.+H -oi' F'lopen.const c+ar Ffilename4 int flag09 const c+ar F'lerror.-oi'09 -oi' F'lsym.-oi' F+an'le4 c+ar Fsym1ol09 int 'lclose.-oi' F+an'le09 'lopen loa's a 'ynamic li1rary from t+e file name' 1y t+e null termi3 nate' string filename an' returns an opa5ue I+an'leI for t+e 'ynamic li1rary. flag must 1e eit+er &TL)CL2WZ4 meaning resol-e un'efine' sym1ols as co'e from t+e 'ynamic li1rary is e6ecute'4 or &TL)CNO,4 meaning resol-e all un'efine' sym1ols 1efore 'lopen returns4 an' fail if t+is cannot 1e 'one. Optionally4 &TL)CTLO!2L may 1e or\e' "it+ flag4 in "+ic+ case t+e e6ternal sym1ols 'efine' in t+e li1rary "ill 1e ma'e a-aila1le to su1se5uently loa'e' li1raries. 'lsym takes a I+an'leI of a 'ynamic li1rary returne' 1y 'lopen an' t+e null terminate' sym1ol name4 returning t+e a''ress "+ere t+at sym1ol is loa'e'. >f t+e sym1ol is not foun'4 'lsym returns NMLL9 +o"e-er4 t+e correct "ay to test for an error from 'lsym is to sa-e t+e result of 'lerror into a -aria1le4 an' t+en c+eck if sa-e' -alue is not NMLL. T+is is 1ecause t+e -alue of t+e sym1ol coul' actually 1e NMLL. >t is also necessary to sa-e t+e results of 'lerror into a -aria1le 1ecause if 'lerror is calle' again4 it "ill return NMLL. 'lclose 'ecrements t+e reference count on t+e 'ynamic li1rary +an'le +an'le. >f t+e reference count 'rops to Eero an' no ot+er loa'e' li1raries use sym1ols in it4 t+en t+e 'ynamic li1rary is unloa'e'. EL2M#LE GESL confidential C Interview questions 1- Loa' t+e mat+ li1rary4 an' print t+e cosine of 2.;7 Sinclu'e Bst'io.+H Sinclu'e B'lfcn.+H int main.int argc4 c+ar FFarg-0 : -oi' F+an'le9 'ou1le .Fcosine0.'ou1le09 c+ar Ferror9 +an'le 8 'lopen .Ili1m.soI4 &TL)CL2WZ09 if .O+an'le0 : fprintf .st'err4 IJsKnI4 'lerror.009 e6it.109 < cosine 8 'lsym.+an'le4 IcosI09 if ..error 8 'lerror.00 O8 NMLL0 : fprintf .st'err4 IJsKnI4 error09 e6it.109 < printf .IJfKnI4 .Fcosine0.2.;009 'lclose.+an'le09 return ;9 < gcc 3r'ynamic 3o foo foo.c 3l'l 33333333333333333333333333333333333333333333333333 )ifference 1et"een a ct+rea'd an' a cprocessd 2 process is a collection of -irtual memory space4 co'e4 'ata4 an' system resources. 2 t+rea' is co'e t+at is to 1e serially e6ecute' "it+in a process. 2 processor e6ecutes t+rea's4 not processes4 so eac+ application +as at least one process4 an' a process al"ays +as at least one t+rea' of e6ecution4 kno"n as t+e primary t+rea'. 2 process can +a-e multiple t+rea's in a''ition to t+e primary t+rea'. #rior to t+e intro'uction of multiple t+rea's of e6ecution4 applications "ere all 'esigne' to run on a single t+rea' of e6ecution. ,+en a t+rea' 1egins to e6ecute4 it continues until it is kille' or until it is interrupte' 1y a t+rea' "it+ +ig+er priority .1y a user action or t+e kernelds t+rea' sc+e'uler0. Eac+ t+rea' can run separate sections of co'e4 or multiple t+rea's can e6ecute t+e same section of co'e. T+rea's e6ecuting t+e same 1lock of co'e maintain separate stacks. Eac+ t+rea' in a process s+ares t+at processds glo1al -aria1les an' resources. 2 t+rea' is a semi3process4 t+at +as its o"n stack4 an' e6ecutes a gi-en piece of co'e. GESL confidential C Interview questions 11 Mnlike a real process4 t+e t+rea' normally s+ares its memory "it+ ot+er t+rea's ."+ere as for processes "e usually +a-e a 'ifferent memory area for eac+ one of t+em0. 2 T+rea' Troup is a set of t+rea's all e6ecuting insi'e t+e same process. T+ey all s+are t+e same memory4 an' t+us can access t+e same glo1al -aria1les4 same +eap memory4 same set of file 'escriptors4 etc. 2ll t+ese t+rea's e6ecute in parallel .i.e. using time slices4 or if t+e system +as se-eral processors4 t+en really in parallel0. T+e a'-antage of using a t+rea' group o-er using a process group is t+at conte6t s"itc+ing 1et"een t+rea's is muc+ faster t+an conte6t s"itc+ing 1et"een processes. communications 1et"een t"o t+rea's is usually faster an' easier to implement t+en communications 1et"een t"o processes.!ecause t+rea's in a group all use t+e same memory space4 if one of t+em corrupts t+e contents of its memory4 ot+er t+rea's mig+t suffer as "ell. ,it+ processes4 t+e operating system normally protects processes from one anot+er4 an' t+us if one corrupts its o"n memory space4 ot+er processes "on/t suffer. 3333333333333333333333333333333333333333333333333333333333333333333333333333333 Linu6 !ooting proce'ure7 T+e moment after a computer is po"ere' on4 it is practically useless 1ecause t+e &2M c+ips contain ran'om 'ata an' no operating system is running. To 1egin t+e 1oot4 a special +ar'"are circuit raises t+e logical -alue of t+e &ESET pin of t+e C#M. 2fter &ESET is t+us asserte'4 some registers of t+e processor .inclu'ing cs an' eip0 are set to fi6e' -alues4 an' t+e co'e foun' at p+ysical a''ress ;6fffffff; is e6ecute'. T+is a''ress is mappe' 1y t+e +ar'"are to some rea'3only4 persistent memory c+ip4 a kin' of memory often calle' &OM .&ea'3Only Memory0. T+e set of programs store' in &OM is tra'itionally calle' !>OS .!asic >nputXOutput System04 since it inclu'es se-eral interrupt3'ri-en lo"3le-el proce'ures use' 1y some operating systems4 inclu'ing Microsoft/s MS3)OS4 to +an'le t+e +ar'"are 'e-ices t+at make up t+e computer. Once initialiEe'4 Linu6 'oes not make any use of !>OS 1ut pro-i'es its o"n 'e-ice 'ri-er for e-ery +ar'"are 'e-ice on t+e computer. >n fact4 t+e !>OS proce'ures must 1e e6ecute' in real mo'e4 "+ile t+e kernel e6ecutes in protecte' mo'e. !>OS uses &eal Mo'e a''resses 1ecause t+ey are t+e only ones a-aila1le "+en t+e computer is turne' on. 2 &eal Mo'e a''ress is compose' of a seg segment an' an off offset9 t+e GESL confidential C Interview questions 15 correspon'ing p+ysical a''ress is gi-en 1y seg F1%Goff. Linu6 is force' to use !>OS in t+e 1ootstrapping p+ase4 "+en it must retrie-e t+e kernel image from 'isk or from some ot+er e6ternal 'e-ice. T+e !>OS 1ootstrap proce'ure essentially performs t+e follo"ing four operations7 1. E6ecutes a series of tests on t+e computer +ar'"are4 in or'er to esta1lis+ "+ic+ 'e-ices are present an' "+et+er t+ey are "orking properly. T+is p+ase is often calle' #OST .#o"er3On Self3Test0. )uring t+is p+ase4 se-eral messages4 suc+ as t+e !>OS -ersion 1anner4 are 'isplaye'. 2. >nitialiEes t+e +ar'"are 'e-ices. T+is p+ase is crucial in mo'ern #C>31ase' arc+itectures4 since it guarantees t+at all +ar'"are 'e-ices operate "it+out conflicts on t+e >&e lines an' >XO ports. 2t t+e en' of t+is p+ase4 a ta1le of installe' #C> 'e-ices is 'isplaye'. 3. Searc+es for an operating system to 1oot. 2ctually4 'epen'ing on t+e !>OS setting4 t+e proce'ure may try to access .in a pre'efine'4 customiEa1le or'er0 t+e first sector .1oot sector0 of any floppy 'isk4 any +ar' 'isk4 an' any C)3&OM in t+e system. . 2s soon as a -ali' 'e-ice is foun'4 copies t+e contents of its first sector into &2M4 starting from p+ysical a''ress ;6;;;;(c;;4 t+en ?umps into t+at a''ress an' e6ecutes t+e co'e ?ust loa'e'. !oot Loa'er7 T+e 1oot loa'er is t+e program in-oke' 1y t+e !>OS to loa' t+e image of an operating system kernel into &2M. >n or'er to 1oot from a floppy 'isk4 t+e instructions store' in its first sector are loa'e' in &2M an' e6ecute'9 t+ese instructions copy all t+e remaining sectors containing t+e kernel image into &2M. !ooting from a +ar' 'isk is 'one 'ifferently. T+e first sector of t+e +ar' 'isk4 name' t+e Master !oot &ecor' .M!&04 inclu'es t+e partition ta1lePEac+ partition ta1le entry typically inclu'es t+e starting an' en'ing sectors of a partition an' t+e kin' of operating system t+at +an'les it.Q an' a small program4 "+ic+ loa's t+e first sector of t+e partition containing t+e operating GESL confidential C Interview questions 19 system to 1e starte'. Some operating systems suc+ as Microsoft ,in'o"s R* i'entify t+is partition 1y means of an acti-e flag inclu'e' in t+e partition ta1le9P!Q follo"ing t+is approac+4 only t+e operating system "+ose kernel image is store' in t+e acti-e partition can 1e 1oote'. 2s "e s+all see later4 Linu6 is more fle6i1le since it replaces t+e ru'imentary program inclu'e' in t+e M!& "it+ a sop+isticate' program calle' L>LO t+at allo"s users to select t+e operating system to 1e 1oote'. !ooting Linu6 from Floppy )isk7 T+e only "ay to store a Linu6 kernel on a single floppy 'isk is to compress t+e kernel image. 2s "e s+all see4 compression is 'one at compile time an' 'ecompression 1y t+e loa'er. >f t+e Linu6 kernel is loa'e' from a floppy 'isk4 t+e 1oot loa'er is 5uite simple. >t is co'e' in t+e arc+Xi3*%X1ootX1ootsect.S assem1ly language file. ,+en a ne" kernel image is pro'uce' 1y compiling t+e kernel source4 t+e e6ecuta1le co'e yiel'e' 1y t+is assem1ly language file is place' at t+e 1eginning of t+e kernel image file. T+us4 it is -ery easy to pro'uce a 1oota1le floppy containing t+e Linu6 kernel. T+e floppy can 1e create' 1y copying t+e kernel image starting from t+e first sector of t+e 'isk. ,+en t+e !>OS loa's t+e first sector of t+e floppy 'isk4 it actually copies t+e co'e of t+e 1oot loa'er. T+e 1oot loa'er4 "+ic+ is in-oke' 1y t+e !>OS 1y ?umping to p+ysical a''ress ;6;;;;(c;;4 performs t+e follo"ing operations7 1. Mo-es itself from a''ress ;6;;;;(c;; to a''ress ;6;;;R;;;;. 2. Sets up t+e &eal Mo'e stack4 from a''ress ;6;;;;3ff. 2s usual4 t+e stack "ill gro" to"ar' lo"er a''resses. 3. Sets up t+e 'isk parameter ta1le4 use' 1y t+e !>OS to +an'le t+e floppy 'e-ice 'ri-er. . >n-okes a !>OS proce'ure to 'isplay a ILoa'ingI message. $. >n-okes a !>OS proce'ure to loa' t+e setup. 0 co'e of t+e kernel image from t+e floppy 'isk an' puts it in &2M starting from a''ress ;6;;;R;2;;. %. >n-okes a !>OS proce'ure to loa' t+e rest of t+e kernel image from t+e floppy 'isk an' puts t+e image in &2M starting from eit+er lo" a''ress ;6;;;1;;;; .for small kernel images compile' "it+ make E>mage0 or +ig+ a''ress ;6;;1;;;;; .for 1ig kernel images compile' "it+ make 1E>mage0. >n t+e follo"ing 'iscussion4 "e "ill say t+at t+e kernel image is Iloa'e' lo"I or Iloa'e' +ig+I in &2M4 respecti-ely. Support for 1ig kernel images "as intro'uce' 5uite recently7 "+ile it uses essentially t+e same 1ooting sc+eme as t+e ol'er one4 it places 'ata in 'ifferent p+ysical memory GESL confidential C Interview questions 18 a''resses to a-oi' pro1lems "it+ t+e >S2 +ole mentione' in Section 2.$.3 in C+apter 2. (. `umps to t+e setup. 0 co'e. !ooting Linu6 from =ar' )isk7 >n most cases4 t+e Linu6 kernel is loa'e' from a +ar' 'isk4 an' a t"o3stage 1oot loa'er is re5uire'. T+e most commonly use' Linu6 1oot loa'er on >ntel systems is name' L>LO .L>nu6 LOa'er09 correspon'ing programs e6ist for ot+er arc+itectures. L>LO may 1e installe' eit+er on t+e M!&4 replacing t+e small program t+at loa's t+e 1oot sector of t+e acti-e partition4 or in t+e 1oot sector of a .usually acti-e0 'isk partition. >n 1ot+ cases4 t+e final result is t+e same7 "+en t+e loa'er is e6ecute' at 1oot time4 t+e user may c+oose "+ic+ operating system to loa'. T+e L>LO 1oot loa'er is 1roken into t"o parts4 since ot+er"ise it "oul' 1e too large to fit into t+e M!&. T+e M!& or t+e partition 1oot sector inclu'es a small 1oot loa'er4 "+ic+ is loa'e' into &2M starting from a''ress ;6;;;;(c;; 1y t+e !>OS. T+is small program mo-es itself to t+e a''ress ;6;;;Ra;;;4 sets up t+e &eal Mo'e stack .ranging from ;6;;;R1;;; to ;6;;;Ra2;;04 an' loa's t+e secon' part of t+e L>LO 1oot loa'er into &2M starting from a''ress ;6;;;R1;;;. >n turn4 t+is latter program rea's a map of a-aila1le operating systems from 'isk an' offers t+e user a prompt so s+e can c+oose one of t+em. Finally4 after t+e user +as c+osen t+e kernel to 1e loa'e' .or let a time3out elapse so t+at L>LO c+ooses a 'efault04 t+e 1oot loa'er may eit+er copy t+e 1oot sector of t+e correspon'ing partition into &2M an' e6ecute it or 'irectly copy t+e kernel image into &2M. 2ssuming t+at a Linu6 kernel image must 1e 1oote'4 t+e L>LO 1oot loa'er4 "+ic+ relies on !>OS routines4 performs essentially t+e same operations as t+e 1oot loa'er integrate' into t+e kernel image 'escri1e' in t+e pre-ious section a1out floppy 'isks. T+e loa'er 'isplays t+e ILoa'ing Linu6I message9 t+en it copies t+e integrate' 1oot loa'er of t+e kernel image to a''ress ;6;;;R;;;;4 t+e setup. 0 co'e to a''ress ;6;;;R;2;;4 an' t+e rest of t+e kernel image to a''ress ;6;;;1;;;; or ;6;;1;;;;;. T+en it ?umps to t+e setup. 0 co'e. T+e setup. 0 Function7 T+e co'e of t+e setup. 0 assem1ly language function is place' 1y t+e linker imme'iately GESL confidential C Interview questions 17 after t+e integrate' 1oot loa'er of t+e kernel4 t+at is4 at offset ;62;; of t+e kernel image file. T+e 1oot loa'er can t+us easily locate t+e co'e an' copy it into &2M starting from p+ysical a''ress ;6;;;R;2;;. T+e setup. 0 function must initialiEe t+e +ar'"are 'e-ices in t+e computer an' set up t+e en-ironment for t+e e6ecution of t+e kernel program. 2lt+oug+ t+e !>OS alrea'y initialiEe' most +ar'"are 'e-ices4 Linu6 'oes not rely on it 1ut reinitialiEes t+e 'e-ices in its o"n manner to en+ance porta1ility an' ro1ustness. setup. 0 essentially performs t+e follo"ing operations7 1. >n-okes a !>OS proce'ure to fin' out t+e amount of &2M a-aila1le in t+e system. 2. Sets t+e key1oar' repeat 'elay an' rate. .,+en t+e user keeps a key presse' past a certain amount of time4 t+e key1oar' 'e-ice sen's t+e correspon'ing keyco'e o-er an' o-er to t+e C#M.0 3. >nitialiEes t+e -i'eo a'apter car'. . &einitialiEes t+e 'isk controller an' 'etermines t+e +ar' 'isk parameters. $. C+ecks for an >!M Micro C+annel 1us .MC20. %. C+ecks for a #SX2 pointing 'e-ice .1us mouse0. (. C+ecks for 2'-ance' #o"er Management .2#M0 !>OS support. *. >f t+e kernel image "as loa'e' lo" in &2M .at p+ysical a''ress ;6;;;1;;;;04 mo-es it to p+ysical a''ress ;6;;;;1;;;. Con-ersely4 if t+e kernel image "as loa'e' +ig+ in &2M4 'oes not mo-e it. T+is step is necessary 1ecause4 in or'er to 1e a1le to store t+e kernel image on a floppy 'isk an' to sa-e time "+ile 1ooting4 t+e kernel image store' on 'isk is compresse'4 an' t+e 'ecompression routine nee's some free space to use as a temporary 1uffer follo"ing t+e kernel image in &2M. R. Sets up a pro-isional >nterrupt )escriptor Ta1le .>)T0 an' a pro-isional Tlo1al )escriptor Ta1le .T)T0. 1;. &esets t+e floating point unit .F#M04 if any. 11. &eprograms t+e #rogramma1le >nterrupt Controller .#>C0 an' maps t+e 1% +ar'"are interrupts .>&e lines0 to t+e range of -ectors from 32 to (. T+e kernel must perform t+is step 1ecause t+e !>OS erroneously maps t+e +ar'"are interrupts in t+e range from to 1$4 "+ic+ is alrea'y use' for C#M e6ceptions . 12. S"itc+es t+e C#M from &eal Mo'e to #rotecte' Mo'e 1y setting t+e #E 1it in t+e cr; status register. T+e pro-isional kernel page ta1les containe' in s"apperCpgC'ir an' pg; i'entically map t+e linear a''resses to t+e same p+ysical a''resses. T+erefore4 t+e transition from &eal Mo'e to #rotecte' Mo'e goes smoot+ly. 13. `umps to t+e startupC32. 0 assem1ly language function. T+e startupC32. 0 Functions7 GESL confidential C Interview questions 54 T+ere are t"o 'ifferent startupC32. 0 functions9 t+e one "e refer to +ere is co'e' in t+e arc+Xi3*%X1ootXcompresse'X+ea'.S file. 2fter setup. 0 terminates4 t+e function +as 1een mo-e' eit+er to p+ysical a''ress ;6;;1;;;;; or to p+ysical a''ress ;6;;;;1;;;4 'epen'ing on "+et+er t+e kernel image "as loa'e' +ig+ or lo" in &2M. T+is function performs t+e follo"ing operations7 1. >nitialiEes t+e segmentation registers an' a pro-isional stack. 2. Fills t+e area of uninitialiEe' 'ata of t+e kernel i'entifie' 1y t+e Ce'ata an' Cen' sym1ols "it+ Eeros .see Section 2.$.3 in C+apter 20. 3. >n-okes t+e 'ecompressCkernel. 0 function to 'ecompress t+e kernel image. T+e IMncompressing Linu6 . . . I message is 'isplaye' first. 2fter t+e kernel image +as 1een 'ecompresse'4 t+e IO U4 1ooting t+e kernel.I message is s+o"n. >f t+e kernel image "as loa'e' lo"4 t+e 'ecompresse' kernel is place' at p+ysical a''ress ;6;;1;;;;;. Ot+er"ise4 if t+e kernel image "as loa'e' +ig+4 t+e 'ecompresse' kernel is place' in a temporary 1uffer locate' after t+e compresse' image. T+e 'ecompresse' image is t+en mo-e' into its final position4 "+ic+ starts at p+ysical a''ress ;6;;1;;;;;. . `umps to p+ysical a''ress ;6;;1;;;;;. T+e 'ecompresse' kernel image 1egins "it+ anot+er startupC32. 0 function inclu'e' in t+e arc+Xi3*%XkernelX+ea'.S file. Msing t+e same name for 1ot+ t+e functions 'oes not create any pro1lems .1esi'es confusing our rea'ers04 since 1ot+ functions are e6ecute' 1y ?umping to t+eir initial p+ysical a''resses. T+e secon' startupC32. 0 function essentially sets up t+e e6ecution en-ironment for t+e first Linu6 process .process ;0. T+e function performs t+e follo"ing operations7 1. >nitialiEes t+e segmentation registers "it+ t+eir final -alues. 2. Sets up t+e Uernel Mo'e stack for process . 3. >n-okes setupCi't. 0 to fill t+e >)T "it+ null interrupt +an'lers . . #uts t+e system parameters o1taine' from t+e !>OS an' t+e parameters passe' to t+e operating system into t+e first page frame . $. >'entifies t+e mo'el of t+e processor. %. Loa's t+e g'tr an' i'tr registers "it+ t+e a''resses of t+e T)T an' >)T ta1les. (. `umps to t+e startCkernel. 0 function. T+e startCkernel. 0 Function7 T+e startCkernel. 0 function completes t+e initialiEation of t+e Linu6 kernel. Nearly e-ery kernel component is initialiEe' 1y t+is function9 "e mention ?ust a fe" of t+em7 f T+e page ta1les are initialiEe' 1y in-oking t+e pagingCinit. 0 function. f T+e page 'escriptors are initialiEe' 1y t+e memCinit. 0 function . f T+e final initialiEation of t+e >)T is performe' 1y in-oking trapCinit. 0 an' initC>&e. 0. GESL confidential C Interview questions 51 f T+e sla1 allocator is initialiEe' 1y t+e kmemCcac+eCinit. 0 an' kmemCcac+eCsiEesCinit. 0 functions . f T+e system 'ate an' time are initialiEe' 1y t+e timeCinit. 0 function. f T+e kernel t+rea' for process 1 is create' 1y in-oking t+e kernelCt+rea'. 0 function. >n turn4 t+is kernel t+rea' creates t+e ot+er kernel t+rea's an' e6ecutes t+e Xs1inXinit program. !esi'es t+e ILinu6 -ersion 2.2.1 . . . I message4 "+ic+ is 'isplaye' rig+t after t+e 1eginning of startCkernel. 04 many ot+er messages are 'isplaye' in t+is last p+ase 1ot+ 1y t+e init functions an' 1y t+e kernel t+rea's. 2t t+e en'4 t+e familiar login prompt appears on t+e console .or in t+e grap+ical screen if t+e L ,in'o" System is launc+e' at startup04 telling t+e user t+at t+e Linu6 kernel is up an' running. GESL confidential