linu复习资料.docx
- 文档编号:533108
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:17
- 大小:306.51KB
linu复习资料.docx
《linu复习资料.docx》由会员分享,可在线阅读,更多相关《linu复习资料.docx(17页珍藏版)》请在冰豆网上搜索。
linu复习资料
1、指令格式:
指令名称[选择项][参数列表]
选择项以-开头
通配符
*:
代表文件名中的任意长度的字符串;
?
:
代表文件名中的任一字符
[]:
代表文件名中的任一属于字符组中的字符
2、
3gcc基本选项
类型
说明
-E
预处理后即停止,不进行编译、汇编及连接
-S
编译后即停止,不进行汇编及连接
-c
编译或汇编源文件,但不进行连接
-ofile
指定输出文件file
程序的编译要经历预处理、编译、汇编以及连接4个阶段。
4、其他常用工具:
putty、makefile、Emacs编辑器
5、Linux系统中“一切皆文件”。
Linux操作系统是以文件为基础而设计的,除了常规文件以外,目录、设备、管道等都属于文件。
6、文件操作方式:
#defineO_ACCMODE0003//主要访问权限位的低两位用来测试权限用
#defineO_RDONLY00
#defineO_WRONLY01
#defeinO_RDWR02
#defineO_CREAT0100
#defineO_EXCL0200//如果存在,返回错误
#defineO_NOCTTY0400//终端控制信息
#defineO_TRUNC01000
#defineO_APPEND02000
7、文件打开与创建:
if((fd_open=open("/bin/ls",O_RDONLY))==-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、获取文件属性stat
intstat(constchar*file_name,structstat*buf);
intfstat(intfiledes,structstat*buf);
9、opendir、closedir、readdir
DIR*opendir(constchar*name);intclosedir(DIR*dirp);
structdirent*readdir(DIR*dir);
10、进程及其状态
进程就是程序的一次执行过程。
进程至少要有三种基本状态。
这三种基本状态是:
运行态、就绪态和封锁态(或等待态)。
进程转换:
11、条件:
由于父子进程执行顺序的不确定性,当子进程先于父进程退出时,子进程会留下一些资源来记录运行的信息,以提供给父进程进行访问。
如果父进程没有调用wait或waitpid函数的话,则子进程将会一直保留这些信息,成为僵尸进程。
如果父进程调用了wait函数,子进程就不会成为僵尸进程。
孤儿进程是指因父亲进程先结束而导致一个子进程被init进程收养的进程。
12、可以通过以下方式结束进程。
<1>、调用exit或_exit。
<2>、在main函数中执行return。
<3>隐含的离开main函数。
Return与exit区别:
return退出当前函数主体,exit()函数退出当前进程,因此,在main函数里面return(0)和exit(0)完成一样的功能。
return仅仅从子函数中返回,而子进程用exit()退出,调用exit()时要调用一段终止处理程序,然后关闭所有I/O流。
13、管道(Pipe)及有名管道(namedpipe):
管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区中存取数据:
管道一端的进程顺序地将数据写入缓冲区,另一端的进程则顺序地读出数据。
两个局限性:
1)支持半双工;2)只有具有亲缘关系的进程之间才能使用这种无名管道;读写特殊性:
1.当读一个写端已经关闭的管道时,在所有数据被读取之后,read函数返回值为0,以指示到了文件结束处;2.如果写一个读端关闭的管道,则产生SIGPIPE信号。
如果忽略该信号或者捕捉该信号并处理程序返回,则write返回-1,errno设置为EPIPE
14、父子进程通过无名管道通信
生命周期
(3)设计一个程序,要求打开文件“pass”,如果没有这个文件,新建此文件;读取系统文件“/etc/passwd”,把文件中的内容都写入“pass”文件。
#include
#include
#include
intmain(intagrs,char*args[])
{intfd_src,fd_des,num;charbuf[10];
if((fd_des=open("pass",O_CREAT|O_WRONLY|O_TRUNC,0644))<0)
{perror("openorcreatefilefailed\n");
exit(EXIT_FAILURE);}
if((fd_src=open("/etc/passwd",O_RDONLY,0644))==-1)
{perror("openpasswdfilefailed\n");
exit(EXIT_FAILURE);}
do{num=read(fd_src,buf,10);
write(fd_des,buf,num);}
while(num>=10);close(fd_src);close(fd_des);
return0;}
(4)设计一个程序,要求新建一个目录,预设权限为d--x--x--x。
#include
#include
#include
intmain(intargc,char*argv[])
{DIR*dir;intfd;
if((fd=mkdir("/home/student/dir",0644))==-1)
{perror("directorycreatedfailed!
");
exit(EXIT_FAILURE);}
if(chmod("dir",S_IXUSR|S_IXGRP|S_IXOTH)<0)
{perror("chomd");exit(EXIT_FAILURE);}
return0;}
.实现两个进程间使用消息队列进行通信
//接受消息
#include
#include
#include
#defineBUFIZE1024structmsg_st{
longintmsg_type;
chartext[BUFIZE];};
intmain()
{intrunning=1;intmsgid=-1;
structmsg_stdata;longintmsgtype=0;
//创建消息队列
msgid=msgget((key_t)1234,0666|IPC_CREAT);
if(msgid==-1)
{fprintf(stderr,"msggetfailedwitherror:
%d\n",errno);exit(EXIT_FAILURE);}
//从队列中获取消息,直到遇到end消息为止
while(running)
{if(msgrcv(msgid,(void*)&data,BUFIZE,msgtype,0)==-1)
{fprintf(stderr,"msggetfailedwitherror:
%d\n",errno);exit(EXIT_FAILURE);}
printf("Youwrote%s\n",data.text);
//遇到end结束
if(strncmp(data.text,"end",3)==0)
{running=0;}
//删除消息队列
if(msgctl(msgid,IPC_RMID,0)==-1)
{fprintf(stderr,"msgctl(IPC_RMID)failed\n");
exit(EXIT_FAILURE);}
exit(EXIT_SUCCESS);}return0;}
//发送消息
#include
#include
#include
#defineBUFSIZE1024
structmsg_st{longintmsg_type;
chartext[MAX_TEXT];};
intmain()
{ntrunning=1;structmsg_stdata;
charbuffer[BUFSIZE];intmsgid=BUFSIZE;
//建立消息队列
msgid=msgget((key_t)1234,0666|IPC_CREAT);
if(msgid==-1)
{fprintf(stderr,"msggetfailedwitherror:
%d\n",errno);exit(EXIT_FAILURE);}
//向消息队列中写消息,直到写入end结束
while(running){
//写入数据
printf("Entersometext:
");fgets(buffer,BUFSIZE,stdin);
data.msg_type=1;strcpy(data.text,buffer);
//消息队列发送消息
if(msgsnd(msgid,(void*)&data,MAX_TEXT,0)==-1)
{fprintf(stderr,"msgsndfailedn");exit(EXIT_FAILURE);}
//输入end结束if(strncmp(buffer,"end",3)==0)
{running=0;}sleep
(1);}exit(EXIT_SUCCESS);
return0;}
—2.上机调试课件中killrecever和killsender程序。
//killrecever
#include
#include
//SIGUSR1信号处理函数
voidCbSigUsr1(intsigno)
{//输出接收到的信号信息
printf("\nreceivesignal=%d.\n",signo);}
voidma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linu 复习资料