您好,欢迎访问三七文档
Ls–l程序:#includestdio.h#includestdlib.h#includedirent.h#includesys/types.h#includesys/stat.h#includetime.h#includestring.h#includegrp.h#includepwd.hvoiddisplay_attribute(structstatbuf,char*name){charbuf_time[32];structpasswd*psd;structgroup*grp;if(S_ISLNK(buf.st_mode)){printf(l);}elseif(S_ISREG(buf.st_mode)){printf(-);}elseif(S_ISDIR(buf.st_mode)){printf(d);}elseif(S_ISCHR(buf.st_mode)){printf(c);}elseif(S_ISBLK(buf.st_mode)){printf(b);}elseif(S_ISFIFO(buf.st_mode)){printf(f);}elseif(S_ISSOCK(buf.st_mode)){printf(s);}if(buf.st_mode&S_IRUSR){printf(r);}else{printf(-);}if(buf.st_mode&S_IWUSR){printf(w);}else{printf(-);}if(buf.st_mode&S_IXUSR){printf(x);}else{printf(-);}if(buf.st_mode&S_IRGRP){printf(r);}else{printf(-);}if(buf.st_mode&S_IWGRP){printf(w);}else{printf(-);}if(buf.st_mode&S_IXGRP){printf(x);}else{printf(-);}if(buf.st_mode&S_IROTH){printf(r);}else{printf(-);}if(buf.st_mode&S_IWOTH){printf(w);}else{printf(-);}if(buf.st_mode&S_IXOTH){printf(x);}else{printf(-);}printf();psd=getpwuid(buf.st_uid);grp=getgrgid(buf.st_gid);printf(%lu,buf.st_nlink);printf(%8s,psd-pw_name);printf(%8s,grp-gr_name);printf(%6lu,buf.st_size);strcpy(buf_time,ctime(&buf.st_mtime));buf_time[strlen(buf_time)-1]='\0';printf(%s,buf_time);}intmain(intargc,char*argv[]){DIR*dir;structdirent*ptr;structstatbuf;if(argc2){printf(usageerror!youshouldusetwoargs\n);exit(EXIT_FAILURE);}if((dir=opendir(argv[1]))==NULL){perror(opendir);exit(EXIT_FAILURE);}while((ptr=readdir(dir))!=NULL){if(ptr-d_name[0]=='.')continue;if(stat(ptr-d_name,&buf)==-1){perror(stat:);exit(1);}display_attribute(buf,ptr-d_name);printf(%s\n,ptr-d_name);}closedir(dir);return0;}第二章习题一、填空1.在Linux中,所有设备和文件的操作都使用_____文件描述符___来进行。2.调用____creat()___函数可以创建一个文件,调用_____stat()____函数可以获取文件的属性。3.在Linux中,文件的权限分为____拥有者____、__组用户_______和__其他用户___三类,每类分为_____R____、___W______和_____X___权限。4.读取一个目录文件的内容时,可使用系统调用_readdir()函数__。5.若file文件存取权限为-r–xr-----,这表明属主有_____读和执行___权限,组用户有___读_____权限,其他用户有____没有____权限。二、程序题1.了解lseek函数。使用Linux系统调用编写程序,实现打开一个文件,将其内容截断为原来长度的1/2。#includestdio.h#includestdlib.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.hintmain(intargc,char*argv[]){intms;chara[]=Thisisatest;charb[20];ms=open(test.txt,O_CREAT|O_RDWR,S_IREAD|S_IWRITE);write(ms,a,strlen(a));lseek(ms,0,SEEK_SET);//do{read(ms,b,strlen(a)/2);printf(%s\t,b);//}while(!EOF);close(ms);return0;}2.使用Linux系统调用编写程序,实现打开一个文件,将其中的大写字母写入文件upper.txt,小写字母写入lower.txt,剩下的字母写入other.txt。#includestdio.h#includestdlib.h#includefcntl.h#includesys/stat.h#includeunistd.h#includestring.hintmain(intargc,char*argv[]){intf1,f2,f3,f4;charch;intret;f4=open(test.txt,O_RDWR,S_IREAD|S_IWRITE);f1=open(upper.txt,O_CREAT|O_RDWR,S_IREAD|S_IWRITE);f2=open(lower.txt,O_CREAT|O_RDWR,S_IREAD|S_IWRITE);f3=open(other.txt,O_CREAT|O_RDWR,S_IREAD|S_IWRITE);if(f40||f10||f20||f30){perror(openfileerror!);}while((ret=read(f4,&ch,1))!=0){if(ch='A'&&ch='Z'){write(f1,&ch,1);}elseif(ch='a'&&ch='z'){write(f2,&ch,1);}elsewrite(f3,&ch,1);}close(f1);close(f2);close(f3);close(f4);}第三章习题一、填空1.在Linux中,进程的控制块使用一个__task_struct_____结构类型来标识的。2.在Linux环境下,进程的两种运行模式是_用户进程_____和__系统进程______。3.在Linux的用户空间中,创建一个新进程的方法是由某个已经存在的进程调用__fork()___或____vfork()___函数,被创建的新进程称为___子进程_,已存在的进程称为__父进程___。4.可运行的进程是一个只等待_CPU___资源的进程。5.调用exit、_exit、abort函数三种方法中,__abort__属于异常结束进程的方法。6.某进程调用wait函数后,如果该进程没有子进程,则该进程将___立即结束返回____。7.产生僵尸进程的要素是:____子进程退出____、_父进程没有回收内核资源________;产生孤儿进程的要素是:__父进程先于子进程退出,而子进程被init进程收养_。二、编程1.编写一个带参数的程序,根据参数的数值,创建相应数量的子进程,每个子进程输出自己的进程号后结束。2.编写一个程序,程序中创建一个子进程用来打开你的Linux系统中的浏览器;父进程等待子进程结束后输出子进程结束的状态。#includestdio.h#includestdlib.h#includewait.h#includeunistd.h#includefcntl.h#includesys/types.hintmian(intargc,charargv[]){pid_tpid;intpid_wait,status;if((pid=fork())0){perror(fork);exit(1);}elseif(pid==0){execle(/usr/bin/google-chrome,google-chrome,NULL);}else{pid_wait=wait(&status);if(WIFEXITED(status)){printf(%d\n,WEXITSTATUS(status));}}return0;}第四章习题一、填空1.命令who1usrlist表示___输出___重定向。2.__dup____和_dup2______可以用来复制文件描述符。3.符号表示__追加____重定向。4.将标准输出重定向到文件描述符为6对应的文件上,则应使用语句______dup2(6,1)_____。5.管道就是将前一个命令的______输出端____作为后一个命令的___输入端_______,分为__有名管道______和_无名管道_两种。其中__无名管道_只能在有亲缘关系的进程间使用。6.___命名管道__也称为FIFO文件。二、编程1.编程序实现ls-llist.txt。#includestdio.h#includestdlib.h#includeunistd.h#includefcntl.hintmain(){intpid,fd;printf(Thisistoshowhowtoredirect!\n);if((pid=fork())==-1){perror(fork);exit(1);}elseif(pid==0){close(1);fd=open(list.txt,O_CREAT|O_WRONLY|O_APPEND,0644);if(execlp(ls,ls,-l,NULL)0){perror(exec);exit(1);}}elseif(pid!=0){wait(NULL);system(catlist.txt);}}第五章习题一、填空1.在实际应用中,一个用户进程常常需要对多个信号做出处理。为了方便对多信号进行处理,在Linux系统中引入___信号集____的概念。2.进程可以忽略大部分信号,除了_SIGKILL_____和___SIGSTOP_____信号。3.在kill(pid,signum)函数中,pid0表示_将结束信号发送给进程号为pid的进程____。4.Ctrl+\发送一个___SIGQUIT______信号。5.SIGHUP信号的作用是____发送一个连接断开信号___。二、分析ppt第17页中程序所收到的信号信息和上下文环境的数据。三、为SIGUSR1信号安装一个处理函数,当捕捉到该信号时,显示当前的系统时间。用kill发送信号测试是否成功。#includestdio.h#includesignal.h#includestdlib.h#includeunistd.hvoidfun(intsigno,siginfo_t*info,voi
本文标题:作业
链接地址:https://www.777doc.com/doc-5655056 .html