版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中國(guó)地質(zhì)大學(xué)(武漢)Linux 程序設(shè)計(jì)上機(jī)實(shí)習(xí)報(bào)告目 錄Linux 第一次上機(jī)(運(yùn)行環(huán)境RedHat)1調(diào)試運(yùn)行CD唱片應(yīng)用程序1運(yùn)行過(guò)程1心得體會(huì)3編寫(xiě)shell腳本,求1到100的和3運(yùn)行過(guò)程3源代碼4編寫(xiě)shell腳本,從鍵盤(pán)輸入兩個(gè)數(shù),求這兩個(gè)數(shù)的和4運(yùn)行過(guò)程4源代碼5等待特定用戶(hù)登錄,每30秒確認(rèn)一次5運(yùn)行過(guò)程5源代碼6找出系統(tǒng)中當(dāng)前消耗磁盤(pán)容量最大的前10個(gè)用戶(hù),并向他們發(fā)送警告郵件6運(yùn)行過(guò)程6源代碼8查找輸入文件的路徑8運(yùn)行過(guò)程8源代碼9Linux 第二次上機(jī)(運(yùn)行環(huán)境RedHat)9定制自己的ls命令。提供至少三種帶參數(shù)的執(zhí)行方式9運(yùn)行過(guò)程9源代碼11調(diào)試編譯串行口通信程序p
2、6.5.c16運(yùn)行過(guò)程16Linux 第三次上機(jī)(運(yùn)行環(huán)境RedHat,CentOS)16創(chuàng)建一個(gè)系統(tǒng)監(jiān)聽(tīng)守護(hù)進(jìn)程,一旦接收到其他進(jìn)程發(fā)來(lái)的信號(hào),馬上給出報(bào)告16運(yùn)行過(guò)程16源代碼18分別利用本地socket套接字和INTENET套接字實(shí)現(xiàn)進(jìn)程間文件傳輸20本地socket套接字運(yùn)行過(guò)程20本地socket套接字服務(wù)器server1.c源代碼22本地socket套接字客戶(hù)端client1.c源代碼23INTENET套接字運(yùn)行過(guò)程25INTENET套接字服務(wù)器server2.c源代碼28INTENET套接字客戶(hù)端client2.c源代碼29感謝與收獲30Linux 第一次上機(jī)(運(yùn)行環(huán)境RedHa
3、t)調(diào)試運(yùn)行CD唱片應(yīng)用程序運(yùn)行過(guò)程圖表 1第一步,使用./CD 命令運(yùn)行CD腳本圖表 2進(jìn)入選項(xiàng)界面圖表 3增加CD圖表 4查找CD圖表 5查詢(xún)數(shù)目圖表 6退出心得體會(huì)通過(guò)運(yùn)行書(shū)上的CD唱片應(yīng)用程序,進(jìn)一步地了解到shell編程的方法,以及編寫(xiě)程序的思路。編寫(xiě)shell腳本,求1到100的和運(yùn)行過(guò)程圖表 7使用./sum1to100運(yùn)行源代碼圖表 8使用cat sum1to100查看源代碼編寫(xiě)shell腳本,從鍵盤(pán)輸入兩個(gè)數(shù),求這兩個(gè)數(shù)的和運(yùn)行過(guò)程圖表 9使用./sumAandB 運(yùn)行源代碼圖表 10使用cat sumAandB查看源代碼等待特定用戶(hù)登錄,每30秒確認(rèn)一次運(yùn)行過(guò)程已知特定用戶(hù)
4、是zzx,我首先讓root用戶(hù)登錄并運(yùn)行程序,可以發(fā)現(xiàn)每隔30s提醒一次圖表 11使用./checkuser運(yùn)行當(dāng)我切換到zzx用戶(hù),并再次運(yùn)行程序,可得如下結(jié)果源代碼圖表 12使用cat checkuser查看代碼找出系統(tǒng)中當(dāng)前消耗磁盤(pán)容量最大的前10個(gè)用戶(hù),并向他們發(fā)送警告郵件運(yùn)行過(guò)程由于權(quán)限等問(wèn)題,我們使用root用戶(hù)運(yùn)行程序圖表 13使用./mymail運(yùn)行運(yùn)行完畢后,我們就可以查看郵件了圖表 14 root用戶(hù)收到的郵件圖表 15 zzx用戶(hù)收到的郵件圖表 16 t1用戶(hù)收到的郵件源代碼圖表 17 使用cat命令查看查找輸入文件的路徑運(yùn)行過(guò)程由于權(quán)限的問(wèn)題,我們使用root用戶(hù)運(yùn)行程
5、序圖表 18 使用./route運(yùn)行,并按照要求輸入文件名源代碼圖表 19 使用cat route查看源代碼Linux 第二次上機(jī)(運(yùn)行環(huán)境RedHat)定制自己的ls命令。提供至少三種帶參數(shù)的執(zhí)行方式運(yùn)行過(guò)程圖表 20 使用./ls 運(yùn)行不帶參數(shù)ls圖表 21使用./ls -l 運(yùn)行帶參數(shù)-l 的ls圖表 22 使用./ls -a運(yùn)行帶參數(shù) -a的ls圖表 23使用./ls -al 運(yùn)行帶參數(shù)-al的ls源代碼#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <
6、;stdio.h>#include <string.h>#include <errno.h>#include <pwd.h>#include <grp.h>#include <time.h>#include <dirent.h>int do_ls(char *dir,char *filename,int lflag)int n;struct stat buf;char out100;struct passwd *pw;struct group *gr;struct tm *t;if(lflag = 0)printf(
7、"%st",filename);return 0;if(lstat(dir,&buf)<0)fprintf(stderr,"stat error:%sn",strerror(errno);return -1;switch(buf.st_mode & S_IFMT)case S_IFREG:printf("-");break;case S_IFDIR:printf("d");break;case S_IFCHR:printf("c");break;case S_IFBLK:p
8、rintf("b");break;case S_IFIFO:printf("p");break;case S_IFLNK:printf("l");break;case S_IFSOCK:printf("s");break;for(n=8;n>=0;n-)if(buf.st_mode&(1<<n)switch(n%3)case 2:printf("r");break;case 1:printf("w");break;case 0:printf(&quo
9、t;x");break;default:break;elseprintf("-");printf(" %d",buf.st_nlink);pw = getpwuid(buf.st_uid);printf(" %s",pw->pw_name);gr = getgrgid(buf.st_gid);printf(" %s",gr->gr_name);printf(" %ld",buf.st_size);t = localtime(&buf.st_atime); print
10、f(" %d-%d-%d %d:%d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min); printf(" %s ",filename); if(S_ISLNK(buf.st_mode)printf(" -> ");if(readlink(filename,out,100)=-1)/printf("readlink errorn");printf("%s",out);printf(&qu
11、ot;n");return 0;int ls_prepare(char *w,int aflag,int lflag) struct stat buf;char name100;DIR *dir;struct dirent *pdr;if(lstat(w,&buf)<0)fprintf(stderr,"stat error:%sn",strerror(errno);return -1;if(S_ISDIR(buf.st_mode) dir = opendir(w);while (pdr = readdir(dir)!=NULL)if(aflag=0)
12、 if(pdr->d_name0='.')continue;memset(name,0,100);strcpy(name,w);strcat(name,"/");strcat(name,pdr->d_name);do_ls(name,pdr->d_name,lflag);elsememset(name,0,100);strcpy(name,w);strcat(name,"/");strcat(name,pdr->d_name);do_ls(name,pdr->d_name,lflag);closedir(di
13、r);elsedo_ls(w,w,lflag);return 0;int main(int argc,char *argv)int aflag =0;int lflag =0;char c;int i;while(c = getopt(argc,argv,"al")!=-1) switch(c)case 'a':aflag =1;break;case 'l':lflag =1;break;default:break;if(argc = optind )ls_prepare("./",aflag,lflag);elsefor
14、(i=optind;i<argc;i+)ls_prepare(argvi,aflag,lflag);printf("n");return 0;調(diào)試編譯串行口通信程序p6.5.c運(yùn)行過(guò)程由于權(quán)限問(wèn)題,我們?cè)趓oot用戶(hù)下運(yùn)行程序圖表 24 使用./mytrunk不帶參數(shù)運(yùn)行圖表 25使用./mytrunk /dev/ttyS0 0帶參數(shù)運(yùn)行Linux 第三次上機(jī)(運(yùn)行環(huán)境RedHat,CentOS)創(chuàng)建一個(gè)系統(tǒng)監(jiān)聽(tīng)守護(hù)進(jìn)程,一旦接收到其他進(jìn)程發(fā)來(lái)的信號(hào),馬上給出報(bào)告運(yùn)行過(guò)程圖表 26首先運(yùn)行守護(hù)進(jìn)程之后查看 當(dāng)前進(jìn)程圖表 27可以發(fā)現(xiàn)守護(hù)進(jìn)程-jincheng在后臺(tái)運(yùn)行
15、,且 PPID=1,PID=4085圖表 28可以發(fā)現(xiàn)守護(hù)進(jìn)程向test.txt發(fā)送了start圖表 29向守護(hù)進(jìn)程發(fā)送終止信號(hào),終止守護(hù)進(jìn)程圖表 30可以發(fā)現(xiàn)后臺(tái)運(yùn)行的守護(hù)進(jìn)程沒(méi)了圖表 31可以發(fā)現(xiàn)守護(hù)進(jìn)程又向test.txt發(fā)送了end圖表 32具體查看test.txt圖表 33具體查看test.txt的內(nèi)容源代碼#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <signal.h>#include &l
16、t;fcntl.h>#include <syslog.h>/* Daemonize myself. */int fd1;void sigintHandler(int sig)if(sig=SIGTERM)write(fd1,"endn",5);exit(0);int daemon (int nochdir, int noclose) pid_t pid; pid = fork (); /* In case of fork is error. */ if (pid < 0) perror ("fork"); return -1; /
17、* In case of this is parent process. */ if (pid != 0) exit (0); /* Become session leader and get pid. */ pid = setsid(); if (pid < -1) perror ("setsid"); return -1; /* Change directory to root. */ if (! nochdir) chdir ("/"); /* File descriptor close. */ if (! noclose) int fd;
18、fd = open ("/dev/null", O_RDWR, 0); if (fd != -1) dup2 (fd, STDIN_FILENO); dup2 (fd, STDOUT_FILENO); dup2 (fd, STDERR_FILENO); if (fd > 2) close (fd); umask (0027); return 0;int main(void)fd1=open("test.txt",O_RDWR | O_TRUNC);write(fd1,"startn",7);daemon(0,0);signal(
19、SIGTERM,sigintHandler);sleep(1000);return 0;分別利用本地socket套接字和INTENET套接字實(shí)現(xiàn)進(jìn)程間文件傳輸本地socket套接字運(yùn)行過(guò)程圖表 34使用./server1運(yùn)行服務(wù)器,顯示服務(wù)器等待狀態(tài)圖表 35當(dāng)在另外一個(gè)終端運(yùn)行客戶(hù)端程序時(shí),服務(wù)器顯示客戶(hù)連接,并要求輸入傳輸文件名稱(chēng)圖表 36當(dāng)服務(wù)器輸入文件名稱(chēng)server1.c后客戶(hù)端顯示接收信息,不過(guò)接收到的文件重定向到test.txt中圖表 37 server1.c的內(nèi)容圖表 38 客戶(hù)端接收到顯示在test.txt的內(nèi)容,和server1.c的內(nèi)容比較,完全一致本地socket套接字
20、服務(wù)器server1.c源代碼#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<sys/un.h>#include<unistd.h>#include<stdlib.h>#include<sys/stat.h>#include<fcntl.h>int main() int filefd,n; / char file100,buf1024; / int server_sockfd,client_sockfd; in
21、t server_len,client_len; struct sockaddr_un server_address; struct sockaddr_un client_address; unlink("server_socket"); server_sockfd =socket(AF_UNIX,SOCK_STREAM,0); server_address.sun_family =AF_UNIX; strcpy(server_address.sun_path,"server_socket"); server_len =sizeof(server_add
22、ress); bind(server_sockfd,(struct sockaddr *)&server_address,server_len); listen(server_sockfd,5); while(1) printf("server waitingn"); client_len =sizeof(client_address); client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len); if(client_sockfd!=-1) p
23、rintf("you have a client ,please put the filename to transport!n"); scanf("%s",file); if(filefd=open(file,O_RDWR)<0) perror("can't find the file"); exit(1); printf("filefd= %dn",filefd); printf("the file is transported ,please wait.n"); lseek(
24、filefd,0L,0);/每次接受客戶(hù)機(jī)連接,應(yīng)將用于讀的源文件指針移到文件頭 write(client_sockfd,file,sizeof(file);/傳送文件名 if(n=read(filefd,buf,sizeof(buf)>0) write(client_sockfd,buf,n); printf("you have transport %d bytes and it is end!n",n); close(client_sockfd); close(filefd); 本地socket套接字客戶(hù)端client1.c源代碼#include<sys/t
25、ypes.h>#include<sys/socket.h>#include<stdio.h>#include<sys/un.h>#include<unistd.h>#include<stdlib.h>#include<sys/stat.h>#include<fcntl.h>int main() int filefd,n,oldfilefd; / char file100,buf1024; int sockfd; int len; struct sockaddr_un address; int result
26、; sockfd =socket(AF_UNIX, SOCK_STREAM,0); address.sun_family =AF_UNIX; strcpy(address.sun_path,"server_socket"); len=sizeof(address); result=connect(sockfd,(struct sockaddr *)&address,len); if(result = -1) perror("oops:client1"); exit(1); if(result!= -1) oldfilefd=open("
27、test.txt",O_RDWR); filefd=dup(oldfilefd); read(sockfd,file,sizeof(file); printf("the filename you receive is:%sn",file); if(n=read(sockfd,buf,sizeof(buf)>0) write(filefd,buf,n); printf("you have received a file which is %d bytes,but the file's context cover the test.txt,so
28、 please check into test.txt!n",n); close(sockfd); close(filefd); exit(0); INTENET套接字運(yùn)行過(guò)程圖表 39使用./server2運(yùn)行服務(wù)器,顯示服務(wù)器等待狀態(tài) 圖表 40當(dāng)在另外一個(gè)終端運(yùn)行客戶(hù)端程序時(shí),服務(wù)器顯示客戶(hù)連接,并要求輸入傳輸文件名稱(chēng) 圖表 41當(dāng)服務(wù)器輸入文件名稱(chēng)server2.c后客戶(hù)端顯示接收信息,不過(guò)接收到的文件重定向到test.txt中圖表 42 server2.c的內(nèi)容圖表 43客戶(hù)端接收到顯示在test.txt的內(nèi)容,和server2.c的內(nèi)容比較,完全一致INTENET套接字服
29、務(wù)器server2.c源代碼#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<stdlib.h>#include<sys/stat.h>#include<fcntl.h>int main()int filefd,n;/ char file100,buf4096;/int serve
30、r_sockfd,client_sockfd;int server_len,client_len;struct sockaddr_in server_address;struct sockaddr_in client_address;server_sockfd =socket(AF_INET,SOCK_STREAM,0);server_address.sin_family=AF_INET;server_address.sin_addr.s_addr=inet_addr("127.0.0.1");server_address.sin_port =9734;server_len
31、=sizeof(server_address);bind(server_sockfd,(struct sockaddr *)&server_address,server_len); listen(server_sockfd,5);while(1) printf("server waitingn"); client_len =sizeof(client_address); client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);if(clien
32、t_sockfd!=-1) printf("you have a client ,please put the filename to transport!n"); scanf("%s",file); if(filefd=open(file,O_RDWR)<0) perror("can't find the file"); exit(1); printf("filefd= %dn",filefd); printf("the file is transported ,please wait.n
33、"); lseek(filefd,0L,0);/每次接受客戶(hù)機(jī)連接,應(yīng)將用于讀的源>文件指針移到文件頭 write(client_sockfd,file,sizeof(file);/傳送文件名 if(n=read(filefd,buf,sizeof(buf)>0) write(client_sockfd,buf,n); printf("you have transport %d bytes and it is end!n",n); close(client_sockfd);close(filefd); INTENET套接字客戶(hù)端client2.c源代碼
34、#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<stdlib.h>#include<sys/stat.h>#include<fcntl.h>int main()int filefd,n,oldfilefd;/char file100,buf4096;int sockfd;int
35、len;struct sockaddr_in address;int result;sockfd =socket(AF_INET,SOCK_STREAM,0);address.sin_family =AF_INET;address.sin_addr.s_addr =inet_addr("127.0.0.1");address.sin_port =9734;len =sizeof(address);result=connect(sockfd,(struct sockaddr *)&address,len); if(result = -1) perror("oops:client2"); exit(1); if(result!=-1) oldfilefd=open("test.txt",O_RDWR); filefd=dup(oldfilefd); read(sockfd,file,sizeof(file); printf("the filename you receive is:%sn",file
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 弱電系統(tǒng)基礎(chǔ)知識(shí) (一)
- 秋季師生互動(dòng)活動(dòng)計(jì)劃
- 研發(fā)團(tuán)隊(duì)成員激勵(lì)和激勵(lì)課程培訓(xùn)
- 提升銷(xiāo)售技巧的行動(dòng)方案計(jì)劃
- 訂單管理與生產(chǎn)計(jì)劃的協(xié)調(diào)
- 生物教學(xué)團(tuán)隊(duì)建設(shè)計(jì)劃
- 安川dx100全部課程
- 企業(yè)學(xué)校招聘會(huì)142
- 演講背景說(shuō)課模板下載
- 高中化學(xué)教師招聘高中化學(xué)必修一第4章 第4節(jié) 氨 硝酸 硫酸 第2課時(shí)教案設(shè)計(jì)
- 儲(chǔ)罐大修施工方案
- 監(jiān)理質(zhì)量管理體系
- MES運(yùn)行管理辦法
- 地層編號(hào)原則
- 廠(chǎng)區(qū)吸煙管理規(guī)定(共2頁(yè))
- 東營(yíng)市初中學(xué)科教研基地建設(shè)實(shí)施方案
- 施耐德XB2-BE系列按鈕指示燈選型手冊(cè)
- 第9講PID算法ppt課件
- 起重機(jī)械租賃公司管理制度匯編
- 拋光標(biāo)準(zhǔn) 50
- 淺析醫(yī)藥行業(yè)供應(yīng)鏈融資
評(píng)論
0/150
提交評(píng)論