linux_程序设计上机实习报告_第1页
linux_程序设计上机实习报告_第2页
linux_程序设计上机实习报告_第3页
linux_程序设计上机实习报告_第4页
linux_程序设计上机实习报告_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中国地质大学(武汉)Linux 程序设计上机实习报告目 录Linux 第一次上机(运行环境RedHat)1调试运行CD唱片应用程序1运行过程1心得体会3编写shell脚本,求1到100的和3运行过程3源代码4编写shell脚本,从键盘输入两个数,求这两个数的和4运行过程4源代码5等待特定用户登录,每30秒确认一次5运行过程5源代码6找出系统中当前消耗磁盘容量最大的前10个用户,并向他们发送警告邮件6运行过程6源代码8查找输入文件的路径8运行过程8源代码9Linux 第二次上机(运行环境RedHat)9定制自己的ls命令。提供至少三种带参数的执行方式9运行过程9源代码11调试编译串行口通信程序p

2、6.5.c16运行过程16Linux 第三次上机(运行环境RedHat,CentOS)16创建一个系统监听守护进程,一旦接收到其他进程发来的信号,马上给出报告16运行过程16源代码18分别利用本地socket套接字和INTENET套接字实现进程间文件传输20本地socket套接字运行过程20本地socket套接字服务器server1.c源代码22本地socket套接字客户端client1.c源代码23INTENET套接字运行过程25INTENET套接字服务器server2.c源代码28INTENET套接字客户端client2.c源代码29感谢与收获30Linux 第一次上机(运行环境RedHa

3、t)调试运行CD唱片应用程序运行过程图表 1第一步,使用./CD 命令运行CD脚本图表 2进入选项界面图表 3增加CD图表 4查找CD图表 5查询数目图表 6退出心得体会通过运行书上的CD唱片应用程序,进一步地了解到shell编程的方法,以及编写程序的思路。编写shell脚本,求1到100的和运行过程图表 7使用./sum1to100运行源代码图表 8使用cat sum1to100查看源代码编写shell脚本,从键盘输入两个数,求这两个数的和运行过程图表 9使用./sumAandB 运行源代码图表 10使用cat sumAandB查看源代码等待特定用户登录,每30秒确认一次运行过程已知特定用户

4、是zzx,我首先让root用户登录并运行程序,可以发现每隔30s提醒一次图表 11使用./checkuser运行当我切换到zzx用户,并再次运行程序,可得如下结果源代码图表 12使用cat checkuser查看代码找出系统中当前消耗磁盘容量最大的前10个用户,并向他们发送警告邮件运行过程由于权限等问题,我们使用root用户运行程序图表 13使用./mymail运行运行完毕后,我们就可以查看邮件了图表 14 root用户收到的邮件图表 15 zzx用户收到的邮件图表 16 t1用户收到的邮件源代码图表 17 使用cat命令查看查找输入文件的路径运行过程由于权限的问题,我们使用root用户运行程

5、序图表 18 使用./route运行,并按照要求输入文件名源代码图表 19 使用cat route查看源代码Linux 第二次上机(运行环境RedHat)定制自己的ls命令。提供至少三种带参数的执行方式运行过程图表 20 使用./ls 运行不带参数ls图表 21使用./ls -l 运行带参数-l 的ls图表 22 使用./ls -a运行带参数 -a的ls图表 23使用./ls -al 运行带参数-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;调试编译串行口通信程序p6.5.c运行过程由于权限问题,我们在root用户下运行程序图表 24 使用./mytrunk不带参数运行图表 25使用./mytrunk /dev/ttyS0 0带参数运行Linux 第三次上机(运行环境RedHat,CentOS)创建一个系统监听守护进程,一旦接收到其他进程发来的信号,马上给出报告运行过程图表 26首先运行守护进程之后查看 当前进程图表 27可以发现守护进程-jincheng在后台运行

15、,且 PPID=1,PID=4085图表 28可以发现守护进程向test.txt发送了start图表 29向守护进程发送终止信号,终止守护进程图表 30可以发现后台运行的守护进程没了图表 31可以发现守护进程又向test.txt发送了end图表 32具体查看test.txt图表 33具体查看test.txt的内容源代码#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套接字实现进程间文件传输本地socket套接字运行过程图表 34使用./server1运行服务器,显示服务器等待状态图表 35当在另外一个终端运行客户端程序时,服务器显示客户连接,并要求输入传输文件名称图表 36当服务器输入文件名称server1.c后客户端显示接收信息,不过接收到的文件重定向到test.txt中图表 37 server1.c的内容图表 38 客户端接收到显示在test.txt的内容,和server1.c的内容比较,完全一致本地socket套接字

20、服务器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);/每次接受客户机连接,应将用于读的源文件指针移到文件头 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套接字客户端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套接字运行过程图表 39使用./server2运行服务器,显示服务器等待状态 图表 40当在另外一个终端运行客户端程序时,服务器显示客户连接,并要求输入传输文件名称 图表 41当服务器输入文件名称server2.c后客户端显示接收信息,不过接收到的文件重定向到test.txt中图表 42 server2.c的内容图表 43客户端接收到显示在test.txt的内容,和server2.c的内容比较,完全一致INTENET套接字服

29、务器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);/每次接受客户机连接,应将用于读的源>文件指针移到文件头 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套接字客户端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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论