《linux复习资料教学提纲》由会员分享,可在线阅读,更多相关《linux复习资料教学提纲(19页珍藏版)》请在金锄头文库上搜索。
1、1、指令格式:指令名称选择项 参数列表 选择项以 -开头通配符* :代表文件名中的任意长度的字符串;?:代表文件名中的任一字符 :代表文件名中的任一属于字符组中的字符2、进入VIM:vim filename命令模式i/a/oESCESC冒号保存退出插入模式底行模式:wq3 gcc 基本选项类型说明-E预处理后即停止, 不进行编译、汇编及连接-S编译后即停止,不进行汇编及连接-c编译或汇编源文件,但不进行连接-o指定输出文件filefile程序的编译要经历预处理、编译、汇编以及连接4、其他常用工具: putty 、makefile 、 Emacs 编辑器4 个阶段。5、Linux 系统中 “一切
2、皆文件 ”。Linux 操作系统是以文件为基础而设计的,除了常规文件以外,目录、设备、管道等都属于文件。6、文件操作方式:#defineO_ACCMODE0003 / 主要访问权限位的低两位用来测试权限用#defineO_RDONLY00#defineO_WRONLY01#defeinO_RDWR02#defineO_CREAT0100#defineO_EXCL0200/如果存在,返回错误#defineO_NOCTTY0400/ 终端控制信息#defineO_TRUNC01000#defineO_APPEND020007、文件打开与创建:if(fd_open=open(/bin/ls,O_RD
3、ONLY) = -1)perror(open);exit(EXIT_FAILURE);if(fd_open_create=open(./tmp,O_CREAT|O_EXCL,0644) = -1) perror(open);exit(EXIT_FAILURE); if(fd_create=creat(./tmp2,0644) = -1 ) perror(open);exit(EXIT_FAILURE);8、获取文件属性statint stat ( const char *file_name,struct stat *buf );int fstat ( int filedes,struct st
4、at *buf );9、opendir 、closedir 、readdirDIR *opendir ( const char *name );int closedir (DIR * dirp); struct dirent *readdir ( DIR * dir );10 、进程及其状态进程就是程序的一次执行过程。进程至少要有三种基本状态。 这三种基本状态是: 运行态、就绪态和封锁态 (或等待态)。进程转换:11 、条件:由于父子进程执行顺序的不确定性,当子进程先于父进程退出时,子进程会留下一些资源来记录运行的信息,以提供给父进程进行访问。如果父进程没有调用 wait 或 waitpid
5、函数的话,则子进程将会一直保留这些信息,成为僵尸进程。 如果父进程调用了 wait 函数,子进程就不会成为僵尸进程。孤儿进程是指因父亲进程先结束而导致一个子进程被init 进程收养的进程。12 、可以通过以下方式结束进程。 、调用 exit 或_exit 。 、在 main 函数中执行 return 。 隐含的离开 main 函数。 Return 与 exit 区别: return 退出当前函数主体, exit() 函数退出当前进程,因此,在 main 函数里面 return(0) 和exit(0) 完成一样的功能。 return仅仅从子函数中返回,而子进程用exit() 退出,调用 exit
6、() 时要调用一段终止处理程序,然后关闭所有I/O 流。13 、管道( Pipe )及有名管道( named pipe ):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区中存取数据:管道一端的进程顺序地将数据写入缓冲区,另一端的进程则顺序地读出数据。两个局限性:1)支持半双工; 2)只有具有亲缘关系的进程之间才能使用这种无名管道; 读写特殊性: 1.当读一个写端已经关闭的管道时,在所有数据被读取之后, read 函数返回值为 0,以指示到了文件结束处;
7、 2.如果写一个读端关闭的管道,则产生 SIGPIPE 信号。如果忽略该信号或者捕捉该信号并处理程序返回,则 write 返回 -1,errno 设置为EPIPE14 、父子进程通过无名管道通信#include #include #include #include #include #include main()pid_t result;int r_num;int pipe_fd2;char buf_r100,buf_w100; memset(buf_r,0,sizeof(buf_r);if(pipe(pipe_fd)0) perror(pipe);exit(EXIT_FAILURE);res
8、ult=fork();if(result0)printf(child process has read %d characters from the pipe,the string is:%sn,r_num,buf_r);close(pipe_fd0);exit(0);else close(pipe_fd0);printf(please input the string:);scanf(%s,buf_w);if(write(pipe_fd1,buf_w,strlen(buf_ w)!=-1)printf(parentprocess haswritten:%s to the pipe!n,buf
9、_w);close(pipe_fd1);waitpid(result,NULL,0);exit(0);信号 是 Linux 系统中用于进程之间相互通信或操作的一种机制。信号事件的发生有两个来源:1. 硬件来源:用户按某些终端键时将产生信号, 如 CTRL+C 将产生 SIGINT (中止信号);硬件异常产生信号,如除数为0 或无效的存储访问等。2. 软件来源:终止进程信号,其他进程调用 kill 函数,将信号发送个另一个进程或进程组;软件异常产生信号。内核进程用户进程信号产生信 号信 号信号处理注册注销生命周期( 3)设计一个程序,要求打开文件 “pass”,如果没有这个文件,新建此文件;读取
10、系统文件 “/etc/passwd ”,把文件中的内容都写入 “pass”文件。#include #include #include #include #include intmain(int agrs,char *args)int fd_src,fd_des,num;char buf10;if(fd_des=open(pass,O_CREAT|O_WRONLY|O_TRUNC,0644)= 10);close(fd_src); close(fd_des);return 0;( 4)设计一个程序,要求新建一个目录,预设权限为d-x-x-x 。#include #include#include
11、#include#include #include int main(int argc,char *argv)DIR *dir;int fd;if(fd=mkdir(/home/student/dir,0644)=-1)perror(directory created failed!);exit(EXIT_FAILURE); if(chmod(dir,S_IXUSR|S_IXGRP|S_IXOTH)0)perror(chomd);exit(EXIT_FAILURE);return 0;. 实现两个进程间使用消息队列进行通信/接受消息#include#include#include#include#include#include#define BUFIZE 1024struct msg_stlong int msg_type;char textBUFIZE;