Professional Documents
Culture Documents
Bao Cao
Bao Cao
LI NI U
Nguyn l h iu hnh l 1 mn hc b ch gip sinh vin chng em hiu bit
c c cu t chc, cng nh vic qun l, iu phi cc tin trnh ca h thng my
tnh. Qua hiu bit phn no v phn mm c bn nht ca my tnh l h iu hnh.
Vic nghin cu, hon thnh n nguyn l h iu hnh cng gip chng em c
hiu r hn na v h iu hnh Linux, 1 h iu hnh c nhiu tnh nng vt tri v c
trin vng trong tng lai.
Chng em xin chn thnh cm n s hng dn ca thy Mai Vn H, tn tnh
ch dn gip chng em hon thnh c ti n ny.
TNG QUAN TI
1.1. Bi cnh ti:
Nhn thy vic giao tip gia cc tin trnh trn linux c th gip ta hiu r hn c ch
x l, v trao i d liu gia cc tin trnh trong h iu hnh linux. Trong vic trao
i d liu, giao tip qua ng ng pipe theo c ch FIFO tng i d hiu v cng
phn no gip em hiu c nguyn l t chc h iu hnh nn chng em quyt nh
chn ti ny.
1.2. Mc tiu ti:
Hiu hn v vic giao tip gia cc tin trnh trong h iu hnh linux c bit l bng
ng ng pipe. Nghin cu ti ny s c th cho ta hiu c th no l pipe v c
ch hot ng ca n.
1.3. Hng gii quyt:
u tin phi tm hiu cch giao tip gia cc tin trnh, l th no 2 tin trnh giao tip
vi nhau thng qua ng ng pipe. Khi giao tip bng pipe ny th vn g s ny sinh
ra ( li, hn ch ). T tm ra cch gii quyt v m phng cch s dng pipe thng qua
bi ton.
Khi mt pipe c thit lp gia hai tin trnh, mt tin trnh s ghi d liu vo pipe cn
tin trnh kia c d liu t pipe.
SVTH: Hong Th Mai Lin
Trang 1
Bo co n Nguyn l h iu hnh
iu trc ht ta phi to hai tin trnh cha v con, lm sao hai tin trnh ny giao tip
vi nhau ta phi to mt ng ng pipe. By gi chng ta i tm hiu v to cc tin
trnh cho n giao tip vi nhau.
CodeBlock
GCC
G++
gdb
GNU make
GNU emacs
trnh)
Bash
Bison
Trang 2
Bo co n Nguyn l h iu hnh
C S L THUYT
1.5. Gii thiu v h iu hnh Linux
1.5.1. Lch s ra i h iu hnh Linux.
Vo nm 1991 ti Phn Lan, Linux B. Torvalds lc l sinh vin trng i hc tng
hp Hensinki dng mt my tnh c nhn c trang b b x l 386 nghin cu cch lm
vic ca n. Do h iu hnh MS-DOS khng khai thc y cc c tnh ca b x l 386,
Linux s dng mt h iu hnh thng mi khc l Minix. H iu hnh Minix l h iu
hnh Unix c nh.
Do i mt vi cc hn ch ca h iu hnh ny, Linux bt u vit li mt s mt s
ca phn mm thm chc nng v cc im c trng. Sau , ng thng bo kt qu ca
mnh min ph bng Internet di tn gi Linux ch vit tt ca Linus v Unix. Phin bn u
tin ca Linux l 0.01 c tung ra vo thng 8/1991.
Cc phin bn u tin c rt nhiu hn ch. Tuy nhin, s kin cc m ngun c
truyn b rng ri gip pht trin h iu hnh rt nhanh. Nhiu nm qua, s lng cc cng
ty khai thc khng ngng tng ln. Ngy nay, Linux c pht trin bi nhiu ngi ri rc
khp ni trn th gii.
Mc d 5 phin bn u tin ca Linux tng i khng n nh, nhng phin bn u
tin c tuyn b l n nh (1.0 ) c cng b vo khong thng 3/1994. S phin bn i
km vi kernel c mt ngha c trng bi v n lin quan n chu k pht trin. Thc t, qu
trnh pht trin Linux din ra theo mt chui hai giai on:
Giai on pht trin: y kernel khng c tin cy cao v tin trnh l b sung chc
nng cho n, ti u ha n v th nghim cc tng mi. Giai on ny em li s gia tng s
lng cc phin bn nh s l, chng hn nh 1.1, 1.3 y l thi im m lng cng vic
ti a c thc hin trn kernel.
Giai on n nh: mc ch l to ra mt kernel cng n nh cng tt. Trong trng
hp ny, ch cho php thc hin cc hiu chnh, sa i nh. S phin bn ca cc kernel c
gi l n nh l cc s chn, chng hn 1.0 , 1.2 v mi nht l 2.2.
Ngy nay, Linux hon ton l mt h iu hnh Unix. N n nh v lin tc pht trin.
N khng ch c kh nng pht trin trn cc thit b ngoi vi mi nht trn th trng ( b nh
flash quang , a quang ) m hiu nng ca n cn c th so snh vi mt s h iu hnh
Unix thng mi v thm ch cn c mt s im u vit hn. Sau cng, mc d Linux c
mt khong thi gian b gii hn trong mi trng cc trng i hc, by gi n ang c tip
nhn cc hng cng nghip.
.
1.5.2. Cc chc nng ca h iu hnh Linux
H iu hnh Linux c rt nhiu chc nng v chng khai thc kh nng ca cc h Unix hin
i theo cc cch sau :
a x l: cc b a x l c th thc hin nhiu chng trnh ng thi bt k s dng mt hay
nhiu b x l.
SVTH: Hong Th Mai Lin
Trang 3
Bo co n Nguyn l h iu hnh
a nn: Cho php nhiu ngi s dng : ging nh tt c cc h Unix, Linux cho php nhiu
ngi s dng cng lm vic trn mt my cng thi im.
H tr truyn thng giao x l ( Pipes , IPC , Sockets ).
Qun l cc thng ip iu khin khc nhau.
H thng qun l thit b u cui tun th theo tiu chun POSIX. Linux cng gi cc
thit b u cui cng nh iu khin qu trnh.
H tr mt di rng cc thit b ngoi vi, chng hn nh cc card m thanh, giao din
hoa, mng, giao din h my tnh nh .
Buffer cache : vng b nh c dnh lm vng m cho cc u vo v u ra t cc
qu trnh khc nhau.
H thng qun l b nh trang yu cu. Mt trang s khng c np chng no n
khng thc s cn thit b nh.
Cc th vin ng v dng chung : Cc th vin ng ch c ti khi chng tht s cn
thit v m ca chng c dng chung nu nhiu ng dng ang dng chng.
Cc h thng file c th qun l tt v ng u cc phn hoch file Linux c s dng
bi filesystem lm cc phn hoch c cc nh dng khc ( MS-DOS , ISO9660, vv. .. ).
Thit b ca TCP/IP v cc giao thc mng khc.
Trang 4
Bo co n Nguyn l h iu hnh
S
to
thnh
Tn hiu
Sn sng
Kt thc
Nhp / Xut
Ngng
Lp lch trnh
Treo
Tn hiu
ang
thc hin
Kt thc
Tn ti
Nhp / Xut
Trang 5
Bo co n Nguyn l h iu hnh
Trng thi ca n.
nh danh ca n.
Cc gi tr ca cc thanh ghi, bao gm c b m chng trnh.
M nh danh ngi s dng c tn m tin trnh ang thc hin.
Thng tin c kernel s dng thit lp lch biu ca cc tin trnh (th t
u tin, v.v).
Thng tin v khng gian a ch ca tin trnh ( cc phn on ca m, d liu,
ngn xp).
Thng tin v cc nhp / xut c tin trnh thc hin ( cc m t v cc file
m, th mc hin hnh )
Tnh tng thch thng tin tng kt cc ti nguyn do tin trnh s dng.
V d, khi c hai ngi dng (user), mt mang tn l A, mt mang tn l B cng ng nhp v
chy chng trnh C ( chng trnh c nhim v tm mt chui k t trong file) ng thi, thc
t h iu hnh s qun l v np m ca chng trnh C vo hai vng nh khc nhau v gi mi
phn vng nh vy l tin trnh. Hnh cho thy cch phn chia chng trnh C thnh hai tin
trnh cho hai ngi dng khc nhau s dng.
hnh minh ha, ngi dng A chy chng trnh C tm chui B trong tp findgirl.txt
$CB findA.txt
Trong khi ngi dng B chy C v tm chui A trong tp findboy.txt
$CA findB.txt
Chng ta nn nh rng hai ngi dng A v B c th hai my tnh khc nhau ng nhp vo
my ch Linux v gi C chy ng thi. Hnh 2 l hin trng khng gian b nh h iu hnh
Linux khi chy chng trnh C phc v ngi dng.
Trang 6
Bo co n Nguyn l h iu hnh
Nu dng lnh ps, h thng s lit k cho bn thng tin v cc tin trnh m h iu hnh ang
kim sot. V d vi tham s -af
, chng ta c th thy cc thng tin do ps lit k nh sau
UID PID PPID C
STIME
TTY TIME CMD
root 2345 1234 0
Apr11 pts/0 00:00:00
[bash]
root 4345 2342 0
20:44 pts/3 00:00:00
ps af
A
111
1235 0
20:44 tty1 00:00:00
CB
find
B
222
1235 0
20:44 tty1 00:00:00
CA
find..
..
Mi tin trnh c gn cho mt nh danh nhn dng gi l PID (process identifier). PID
thng l s nguyn dng c gi tr t 2 32768. Khi mt tin trnh mi yu cu khi ng, h
iu hnh s chn ly mt s (cha b tin trnh ang chy no chim gi) trong khon s
nguyn trn v cp pht cho tin trnh mi. Khi tin trnh chm dt, h thng s thu hi li s
PID cp pht cho tin trnh mi.
Tin trnh vi PID = 1 l tin trnh init, tin trnh init c gi v chy ngay khi khi ng h
iu hnh, init l tin trnh qun l v to ra mi tin trnh con khc.
Chng ta thy lnh ps af hin th hai tin trnh A v B vi cc s PID ln lt l 111 v 222.
M lnh thc thi ca lnh C cha trong tp chng trnh c sn trong a c h iu hnh np
vo b nh. Nh thy trn hnh , mi tin trnh c h iu hnh phn chia r rng : vng
cha m lnh (code), vng cha d liu (data). M lnh thng l ging nhau v c th s dng
chung. Linux qun l cho php tin trnh ca cng mt chng trnh c th s dng chung m
lnh ca nhau.
Th vin cng vy. Tr nhng th vin c th cn th cc th vin chun s c h iu hnh
cho php chia s v dng chung bi mi tin trnh trong h thng. Vic chia s th vin, kch
thc chng trnh s gim i ng k.
SVTH: Hong Th Mai Lin
Trang 7
Bo co n Nguyn l h iu hnh
Tr m lnh v th vin cn hu nh d liu khng th chia s bi cc tin trnh. Mi tin trnh
s hu phn on d liu ring ( nh ta thy v d trn). Mi tin trnh cng c h thng
dnh ring cho mt bng m t file. Bng ny cha cc s m t p t cho cc file ang c
m. V mi tin trnh c ring ngn xp stack lu bin cc b v cc gi tr tr v sau li gi
hm. Tin trnh cng c dnh cho khong khng gian dnh ring lu cc bin mi trng.
Cui cng mi tin trnh hot ng trong khng gian a ch o c lp do h thng cp pht.
Chng ta khng cn quan tm n b nh vt l. Linux v UNIX c cch qun l phn trang
cng vi hon chuyn gia b nh vt l v b nh o thng qua phn vng swap.
Bng thng tin tin trnh
H iu hnh lu d mt cu trc danh sch bn trong h thng gi l bng tin trnh(process
table).Bng tin trnh qun l tt c cc Pid ca h thng cng vi cc thng tin chi tit v cc
tin trnh ang chy.
Ta c th xem bng tin trnh vi lnh ps af ( vi ty chn af hin th chi tit ) :
UID
PID
PPID
C
STIME
TTY
TIME
CMD
root
2345
1234
0
Apr11
pts/0
00:00:00
[bash]
A
111
1235
0
20:44
tty1
00:00:00
CB
find
B
222
1235
0
20:44
tty1
00:00:00
CA
find..
..
Trong :
CMD
ton
dng
lnh
khi
tin
trnh
triu
gi
Trang 8
Bo co n Nguyn l h iu hnh
N tng ng vi vic ta gi shell thc thi lnh ca h thng.
system() s tr v m li 127 nu nh khng th khi ng shell
gi lnh cmdstr. M li 1 nu gp cc li khc. Ngc li m
tr v ca system() l m li do cmdstr sau khi thc thi tr v.
V d cch s dng hm system() trong chng trnh:
V d : system.c
Hm system() c s dng gi lnh ps ax ca h iu hnh.
$sh c cmdstr
#include <stdlib.h>
#include<stdio.h>
int main()
{
printf(Running ps with system\n);
system(ps ax);
printf(Done.\n);
exit(0);
}
Hm system() l cch n gin nht ta triu gi mt chng trnh ngoi khc. Hay ni
ng hn l to mt tin trnh mi tch bit vi tin trnh ban u ca ni gi.
*const envp[]);
thc thi trn a. Arg l cc i s cn truyn cho chng trnh thc thi, nhng i s ny tng
t cch ta gi chng trnh t dng lnh..
SVTH: Hong Th Mai Lin
Trang 9
Bo co n Nguyn l h iu hnh
V d : exec.c
Khi chy chng trnh lnh ps c thc thi, chng trnh exec ca ta khng ch ps
#include <unistd.h>
#include <stdio.h>
int main()
{
printf(Running ps with execlp\n);
execlp(ps, ps, -ax, 0);
printf(Done. But you never see this line);
exit();
}
chm dt v cng khng bao gi in ra chui Done. L do l ton b m lnh v khng gian ca
tin trnh exec sau khi gi hm execlp b thay th bi tin trnh mi ps.
Gi fork()
Tr v PID ca tin trnh
cha
Tr v tr 0
M lnh k tip
ca tin trnh u
(cha)
Trang 10
Bo co n Nguyn l h iu hnh
Trng hp khng tch c, fork() s tr v tr -1. Kiu pid_t c khai bo v nh danh trong
unistd.h l kiu nguyn(int).
C hai tin trnh trn hot ng ng thi v c th ang xen nhau.
V d cho cch s dng hm fork() nhn i tin trnh:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
printf(fork program starting\n);
pid = fork();
if (pid == -1)
perror(Can not call fork); // D liu b li
else if (pid ==0) printf(This is the child);
else printf(this is the parent);
}
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int &stat_loc);
Hm wait() c gi trong tin trnh cha s dng li ch tin trnh con kt thc trc khi thc
hin tip cc lnh iu khin trong tin trnh cha. wait() lm cho s lin lc gia tin trnh cha v
tin trnh con tr nn tun t. Khi tin trnh con kt thc hm s tr v s PID tng ng ca tin
trnh con. Nu ta truyn thm i s stat_loc khc Null cho hm th wait() cng s tr v trng
thi m tin trnh con kt thc trong bin stat_loc. Ta c th s dng cc macro khai bo sn
trong sys/wait.h din dch ngha trng thi nh sau :
WIFEXITED(stat_loc)
WEXITSTATUS(stat_loc)
WIFSIGNALED(stat_loc)
Trang 11
Bo co n Nguyn l h iu hnh
WTERMSIG(stat_loc)
WIFSTOPPED(stat_loc)
WSTOPSIG(stat_loc)
Tr v s hiu ca signal
Trang 12
Bo co n Nguyn l h iu hnh
Chia s thng tin: Nhiu tin trnh c th cng quan tm n nhng d liu no ,
do vy h iu hnh cn cung cp mt mi trng cho php s truy cp ng thi n cc
d liu chung.
Hp tc hon thnh tc v: Nhiu tin trnh cng tham gia thc hin mt cng
vic. Hnh thc ny s y nhanh kh nng x l cng vic trong h thng.
Trang 13
Bo co n Nguyn l h iu hnh
ng dn truyn thng
Tin trnh A
Tin trnh B
Trang 14
Bo co n Nguyn l h iu hnh
Trang 15
Bo co n Nguyn l h iu hnh
rc = pipe(data_pipe);
if (rc == -1) {
perror(pipe create error);
exit(1);
}
/* Tch i tin trnh con*/
pid = fork();
switch (pid) {
case 1 :
perror (fork error);
exit(1);
case 0:
do_child(data_pipe);
default :
doparent(data_pipe);
}
return 0;
}
Trang 16
Bo co n Nguyn l h iu hnh
1.8.4. Pipe t tn
Qua v d trn ta thy ng ng ch c to ra v truyn d liu gia hai tin
trnh cha v con. Tin trnh cha gi fork() chuyn giao v gn ng ng vo tin
trnh con, tin trnh con nhn d liu x l v chuyn v cho tin trnh cha. ng ng
to ra bng hm pipe() c gi l ng ng v danh. N ch c s dng gia tin
trnh cha v con do ta ch ng to ra bng hm fork(). Mt vn t ra l, nu hai tin
trnh khng c quan h g vi nhau th c th s dng c c ch pipe giao tip vi
nhau khng? Cu tr li l c, Linux cho php ta to ra cc ng ng t tn. Nhng
ng ng mang tn s nhn thy v truy xut c bi cc tin trnh khc nhau.
* To pipe t tn vi hm mkfifo()
ng ng t tn cn c gi vi mt tn khc l i tng FIFO. Tht s
ng ng mang tn c biu din nh l mt file trong h thng file ca Linux. Ta
dng lnh mkfifo to file ng ng vi tn ch nh. Trong chng trnh, ta dng
hm h thng mkfifo() hay mknod(). Khai bo hm mkfifo() :
#include <sys/types.h>
#include <sys/stat.h>
mkfifo(const char *filename, mode_t mode);
Hm mkfifo() yu cu hai i s, i s filename l tn ca ng ng cn to,
mode l ch c ghi ca ng ng.
Vic to ng ng t tn khng lin quan g n cc tin trnh. Ta c th to ra
pipe trc khi xy dng cc chng trnh s dng n.
Trang 17
Bo co n Nguyn l h iu hnh
1.10. M t bi ton :
Chng ta s xy dng mt chng trnh n gin m phng s giao tip
gia 2 tin trnh : tin trnh cha(P0) v tin trnh con(P1) qua c ch ng
ng. Tin trnh cha s cho ngi dng nhp vo chui biu thc cn tnh v
lu vo input_pipe. Sau tin trnh con s c d liu t input_pipe v x
l tnh ton kt qu chui biu thc, tr kt qu v cho tin trnh cha thng
qua output_pipe. Tin trnh cha s ly d liu ra t output_pipe v hin th
cho ngi dng bit.
Cc hm,bin quan trng s dng trong chng trnh
Trang 18
Bo co n Nguyn l h iu hnh
La chn ngn ng v IDE: Chng trnh c code bng ngn ng C trn Ubuntu, IDE
c s dng l CodeBlock
void
{
main(void)
pid_t pid;
int input_pipe[2];
int output_pipe[2];
int rc, child_status;
rc = pipe(input_pipe);
if(rc ==-1){
perror("\tmain : input_pipe error");
exit(1);
}
P1 x l biu thc
nhp vo
rc = pipe(output_pipe);
if(rc ==-1){
perror("\tmain : output_pipe error");
exit(1);
}
pid = fork();
if (pid == 0)
ChildProcess(input_pipe, output_pipe);
else{
//wait( &child_status );
ParentProcess(input_pipe, output_pipe);
}
Trang 19
Bo co n Nguyn l h iu hnh
}
void
{
}
void
{
rc;
c, ch[100] = "";
close(input[0]);
close(output[1]);
printf("\n\tNhap bieu thuc:
"); gets(ch);
rc = write(input[1], ch, strlen(ch));
if (rc==-1)
{
perror("Error");
close(input[0]);
close(input[1]);
exit(1);
}
rc = read(output[0], ch, 100);
if (rc==-1)
{
perror("Error");
Trang 20
Bo co n Nguyn l h iu hnh
close(output[0]);
close(output[1]);
exit(1);
}
close(input[1]);
close(output[0]);
}
void xuly(char *ch){
char stack_[100] = "", kq[100] = "", tam[100]="";
int i = 0, j = -1, k = -1, temp = 0;
/*
i : chi so vong lap for
j : chi so stack
k : chi so chuoi hau to kq
*/
//Chuyen bieu thuc dang trung to sang hau to
for( ; i<strlen(ch); i++){
switch(ch[i]){
case '+':
if(k<0) {
stack_[++j] = 'd'; //truong hop nay + la dau
duong
break;
}
if(isOperator(ch[i-1])) {
while(j>=0 && (stack_[j]=='a' || stack_[j]=='d'))
kq[++k] = stack_[j--];
stack_[++j] = 'd'; //truong hop nay + la dau
duong
break;
}
case '-':
if(k<0) {
stack_[++j] = 'a'; //truong hop nay - la dau am
break;
}
if(isOperator(ch[i-1])) {
while(j>=0 && (stack_[j]=='a' || stack_[j]=='d'))
kq[++k] = stack_[j--];
stack_[++j] = 'a'; //truong hop nay - la dau am
break;
}
else{
while(j>=0 && (stack_[j]=='+' || stack_[j]=='-'
|| stack_[j]=='*' || stack_[j]=='/' || stack_[j]=='^' || stack_[j]=='a'
|| stack_[j]=='d') ) kq[++k] = stack_[j--];
stack_[++j] = ch[i];
}
break;
case '*':
case '/':
Trang 21
Bo co n Nguyn l h iu hnh
if( (k<0) || isOperator(ch[i-1]) ) {
errorBt();//Bieu thuc loi
return;
break;
}
else{
while(j>=0 && (stack_[j]=='*' || stack_[j]=='/'
|| stack_[j]=='^' || stack_[j]=='a' || stack_[j]=='d') ) kq[++k] =
stack_[j--];
stack_[++j] = ch[i];
}
break;
case '^':
if( k<0 || isOperator(ch[i-1]) ) {
errorBt();//Bieu thuc loi
return;
}
else{
while(j>=0 && (stack_[j]=='^' || stack_[j]=='a'
|| stack_[j]=='d'))
kq[++k] = stack_[j--];
stack_[++j] = ch[i];
}
break;
case '(':
stack_[++j] = ch[i];
break;
case ')':
while(j>=0 && stack_[j]!= '(') kq[++k] = stack_[j--];
j--;
break;
default:
if(isdigit(ch[i]) != 0){
temp = temp * 10 + ch[i] - 48;
if(isdigit(ch[i+1])==0) {
kq[++k] = temp;
temp = 0;
}
}
else i = isOther(i);
}
}
while(j>=0){
kq[++k] = stack_[j--];
}
printf("\n\tDang trung to: %s", ch);
printf("\n\tDang hau to: ");
for(i = 0; i <= k; i++){
switch(kq[i]){
case 'd':
inKt('+');
break;
case 'a':
inKt('-');
break;
Trang 22
Bo co n Nguyn l h iu hnh
case
case
case
case
case
'+':
'-':
'*':
'/':
'^':
inKt(kq[i]);
break;
case 's':
printf("sin");
break;
case 'c':
printf("cos");
break;
default:
inNumber(kq[i]);
}
}
//Tinh gia tri bieu thuc tu bieu thuc hau to
/*
i : chi so vong lap
j : chi so stack
temp : bien tam
*/
i = 0; j = -1; temp = 0;
for( ; i<= k; i++){
switch(kq[i]){
case 'd':
break;
case 'a':
stack_[j]=-stack_[j];
break;
case '^':
//stack_[j-1] = (char)pow((double)stack_[j-1],
(double)stack_[j]);
temp = (char)mu((int)stack_[j-1], (int)stack_[j]);
stack_[--j] = temp;
break;
case '+':
temp = stack_[j] + stack_[j-1];
stack_[--j] = temp;
break;
case '-':
temp = stack_[j-1] - stack_[j];
stack_[--j] = temp;
break;
case '*':
temp = stack_[j] * stack_[j-1];
stack_[--j] = temp;
break;
case '/':
temp = stack_[j-1] / stack_[j];
stack_[--j] = temp;
break;
default:
stack_[++j] = kq[i];
Trang 23
Bo co n Nguyn l h iu hnh
}
}
if(j!=0) printf("\nTinh toan sai: j = %d",j);
else printf("\n\tKet qua bieu thuc: %d", stack_[0]);
//Bo sung ket qua sau chuoi da nhap
AddChar(ch, '=');
AddNumber(ch, stack_[0]);
}
void
}
void AddNumber(char *ch, int n){
char a[100];
int i = -1;
if(n < 0){
n = -n;
AddChar(ch, '-');
}
do{
a[++i] = n % 10 + 48;
n = n /10;
}while(n);
for( ; i >=0 ; i--){
AddChar(ch, a[i]);
}
}
void
inKt(char kt){
printf("%c", kt);
}
void
inNumber(int n){
char a[100];
int i = 0;
if(n < 0){
n = -n;
inKt('-');
}
do{
a[++i] = n % 10 + 48;
n = n /10;
}while(n);
for( ; i >=0 ; i--){
inKt(a[i]);
}
Trang 24
Bo co n Nguyn l h iu hnh
Trang 25
Bo co n Nguyn l h iu hnh
1.13. nh gi:
Chng trnh tha yu cu ca bi ton v vic giao tip gia cc qu trnh bng
ng pipe trn nn Linux.
Tuy nhin, vic x l biu thc nhp vo cn cha ti u, cha hon thin.
Trang 26
Bo co n Nguyn l h iu hnh
Trang 27
Bo co n Nguyn l h iu hnh
Trang 28