linux程序设计期末复习资料.docx
- 文档编号:6916999
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:16
- 大小:373.20KB
linux程序设计期末复习资料.docx
《linux程序设计期末复习资料.docx》由会员分享,可在线阅读,更多相关《linux程序设计期末复习资料.docx(16页珍藏版)》请在冰点文库上搜索。
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; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 程序设计 期末 复习资料