linux程序设计期末复习资料.docx

上传人:b****4 文档编号:11607199 上传时间:2023-03-28 格式:DOCX 页数:16 大小:373.20KB
下载 相关 举报
linux程序设计期末复习资料.docx_第1页
第1页 / 共16页
linux程序设计期末复习资料.docx_第2页
第2页 / 共16页
linux程序设计期末复习资料.docx_第3页
第3页 / 共16页
linux程序设计期末复习资料.docx_第4页
第4页 / 共16页
linux程序设计期末复习资料.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

linux程序设计期末复习资料.docx

《linux程序设计期末复习资料.docx》由会员分享,可在线阅读,更多相关《linux程序设计期末复习资料.docx(16页珍藏版)》请在冰豆网上搜索。

linux程序设计期末复习资料.docx

linux程序设计期末复习资料

1.GPL的含义是什么?

答:

GPL,是GeneralPublicLicense的缩写,GNU通用公共许可证。

2.Linux的常用shell指令有哪些?

(1)重定向输出的例子ls-1>lsoutput.txtls-l>>lsoutput.txt

0:

标准输入1:

标准输出2:

标准错误输出

(2)重定向输入的例子more

(3)管道的例子ls-l|more

(4)HelloWorld例子:

#!

/bin/bash#!

用来指明shell程序本身所在的位置

#Itisaverysimpleexample#表示行注释

echoHellotheWorldecho是bash中的一个指令,显示

(5)shell程序的执行:

a:

在shell中输入指令bashhello

b:

在shell中输入指令chmod755hello./hello

(6)交互式输入readSTR:

运行该指令后,shell会停止等待输入,以回车键结束,

此时不需要加引号,即使包含空格;如果加了引号,则引号将作为变量值的一部分。

(7)bash的变量:

bash中的变量不需要事先定义类型;默认为字符串,特殊标记为整型,

没有浮点型;字符串含空格时必须使用双引号,不含空格可不用;赋值符号前后不能

有空格;引用时,加${变量名},花括号可省略。

bash的变量(eg2_1)

#!

/bin/bash

STR=Helloecho$STR

echo$STRSTR=7+5

STR=“Helloworld”echo$STR

echo$STRechoSTR

STR=Helloworld

(8)引号的作用:

参数值中包含空白符号,就需要使用引号;如果双引号中含有以$开头的

变量的引用,则需要使用变量值;如果是单引号中含有$的变量引用,则使用元符号,

而不是变量值;也可以在$前添加\,也是不展开变量,只使用元符号。

变量引用的例子(eg2_2):

#!

/bin/bash

X=“Hithere”

echo$X

echo“itisdoublequotes$X”

echo‘itissinglequotes$X’

echoitisslash\$X

(9)bash整数运算:

使用let命令;使用expr命令;使用((……))形式。

let(必须使用紧凑形式):

(10)bash中有两种条件指令:

test或者[…]当使用中括号时,括号两边必须有空格;你可以把括号想象成普通的字符单词,而不是一个可区分的运算符。

条件式:

字符串的比较,算术比较,文件的条件判断

ifcondition

then

语句

else

语句

fi

(11)参数传递及返回值:

函数使用$1、$2、$*等传递参数;使用return返回数值

环境变量:

$0:

shell指令本身

$1:

shell指令的第一个参数

$2:

shell指令的第二个参数

……

$*:

除了$0的上述所有参数连成一个单一变量,每个参数之间用${IFS}分开

$@:

同$*,但每个参数之间用空格分开

$IFS:

inputfieldseparator,默认为空格,也可以为tab或者换行符,可以更改

(12)函数:

函数名(){语句们}

(13)冒号指令:

冒号指令就是一条空指令,并且始终表示true

exit指令:

0:

表示成功

1-125:

表示错误,可以自行定义

126:

文件不是一个可执行文件

127:

该指令不存在

128及以上:

发出一个信号

(14)export指令:

export将某个变量以及它的值对某次shell环境可见

(15)shift指令:

移动参数;$2变成$1、$3变成$2……;原来的$1被扔掉;$0保持不变;

$*、$@等发生相应的变化

(16)find指令:

查找文件;在shell中输入指令:

find/-nametest-print;在根目录中查找名为test的文件;find[path][options][tests][actions]

(17)grep指令:

generalregularexpressionparser;find用来在系统中寻找文件;grep用来在文件中寻找字符串;grep[options]PATTERN[FILES]

3.Linux进程间通信的方法有哪些?

答:

1、管道(pipe)

2、有名管道(namedpipe)

3、信号量

4、消息队列

5、信号

6、共享内存

7、套接字

4.设计一个带2参数的shell程序,最后输出参数的和差积商

答:

#!

/bin/bash

echo"请输入两个数,格式n1n2:

"

readn1n2

num1=$(($n1+$n2))

echo"两数之和为:

$num1"

num2=$(($n1-$n2))

echo"两数之差为:

$num2"

num3=$(($n1*$n2))

echo"两数之积为:

$num3"

if["$n2"-ne"0"]

then

num4=$(($n1/$n2))

echo"两数之商为:

$num4"

else

echo"两数之商非法"

fi

5.编写一个具有cp功能的C程序。

答:

#include

#include

#include

#include

#definePERMS0666

#defineDUMMY0

#defineBUFFERSIZE1024

intmain(intargc,char*argv[])

{

intsource_fd,target_fd,num;

chariobuffer[BUFFERSIZE];

if(argc!

=3)

{

printf("usage:

copysourcefiletargetfile\n");

return1;

}

if((source_fd=open(*(argv+1),O_RDONLY,DUMMY))==-1)

{

printf("opensourcefileerror\n");

return2;

}

if((target_fd=open(*(argv+2),O_WRONLY|O_CREAT,PERMS))==-1)

{

printf("targetfileopenerror\n");

return3;

}

while((num=read(source_fd,iobuffer,BUFFERSIZE))>0)

{

if(write(target_fd,iobuffer,num)!

=num)

{

printf("targetfilewriteerrorn\n");

return4;

}

}

close(source_fd);

close(target_fd);

return0;

}

6.编写一个安装指定信号如SIGINT的程序

答:

#include

#include

voidfun(ints){

printf("U'dpressedCtrl+C\n");

}

intmain(){

signal(SIGINT,fun);

while

(1){

printf("Haha\n");

sleep

(2);

}

return0;

}

7.编写一个子线程程序,正确安排子线程的创建、退出

答:

第一种:

 函数pthread_join用来等待一个线程的结束。

#include

#include

#include

#include

voidprint_message(char*ptr)

{

inti;

for(i=0;i<10;i++)

printf("%s",ptr);

}

intmain()

{

pthread_tthread1,thread2;

void*retval;

char*msg1="hello\n";

char*msg2="world\n";

pthread_create(&thread1,NULL,(void*)(&print_message),(void*)msg1);

pthread_create(&thread2,NULL,(void*)(&print_message),(void*)msg2);

pthread_join(thread1,&retval);

pthread_join(thread2,&retval);

return0;

}

第二种:

线程通过调用pthread_exit函数终止执行,就如同进程在结束时调用exit函数一样。

这个函数的作用是,终止调用它的线程并返回一个指向某个对象的指针。

#include

#include

#include

#include

voidprint_message(char*ptr)

{

intretval;

printf("ThreadID:

%lx\n",pthread_self());

printf("%s",ptr);

pthread_exit(&retval);

}

intmain()

{

pthread_tthread1,thread2;

void*retval;

char*msg1="hello\n";

char*msg2="world\n";

pthread_create(&thread1,NULL,(void*)(&print_message),(void*)msg1);

pthread_create(&thread2,NULL,(void*)(&print_message),(void*)msg2);

sleep

(1);

return0;

}

8.编写一个子进程的程序,正确安排子进程的创建、返回

答:

#include

#include

#include

intmain()

{

pid_tpid;

char*message;

printf("forkprogramstarting\n");

pid=fork();

if(pid<0)

{

printf("forkerror\n");

}

elseif(pid==0)

{

printf("ID=%dThisisthechild!

\n",pid);

exit(0);

}

else

{

sleep

(2);

printf("ID=%dThisistheparent!

\n",pid);

exit(0);

}

return0;

}

9.分别编写TCP服务器端、客户端程序

答:

服务器端:

#include

#include

#include

#include

#include

#include

#defineLISTENQ5

#defineMAXLINE512

intmain()

{

intlistenfd,connfd;

socklen_tlen;

structsockaddr_inservaddr,cliaddr;

charbuff[MAXLINE];

time_tticks;

listenfd=socket(AF_INET,SOCK_STREAM,0);

if(listenfd<0)

{

printf("socketcreatedfailed.\n");

return-1;

}

servaddr.sin_family=AF_INET;

servaddr.sin_port=htons(6666);

servaddr.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(listenfd,(structsockaddr*)&servaddr,sizeof(servaddr))<0)

{

printf("bindfailed.\n");

return-1;

}

printf("listenning...\n");

listen(listenfd,LISTENQ);

while

(1)

{

len=sizeof(cliaddr);

connfd=accept(listenfd,(structsockaddr*)&cliaddr,&len);

printf("connectfrom%s,port%d\n",

inet_ntoa(cliaddr.sin_addr.s_addr),ntohs(cliaddr.sin_port));

ticks=time(NULL);

sprintf(buff,"%.24s\r\n",ctime(&ticks));

printf("time:

%s\n",buff);

write(connfd,buff,strlen(buff));

close(connfd);

}

return0;

}

客户端:

#include

#include

#include

#include

#defineMAXBUFFSIZE256

#defineHOST_ADDR"127.0.0.1"

intmain()

{

intsockfd,n;

charrecvbuff[MAXBUFFSIZE];

structsockaddr_inservaddr;

sockfd=socket(AF_INET,SOCK_STREAM,0);

if(sockfd<0)

{

printf("socketcreatedfailed.\n");

return-1;

}

servaddr.sin_family=AF_INET;

servaddr.sin_port=htons(6666);

servaddr.sin_addr.s_addr=htonl(INADDR_ANY);

printf("conneting...\n");

if(connect(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr))<0)

{

printf("connectserverfailed");

return-1;

}

while((n=read(sockfd,recvbuff,MAXBUFFSIZE))>0)

{

recvbuff[n]=0;

fputs(recvbuff,stdout);

}

if(n<0)

{

printf("readfailed!

\n");

return-2;

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1