linu复习资料Word文档下载推荐.docx
《linu复习资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《linu复习资料Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
-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("
if((fd_create=creat("
./tmp2"
0644))==-1){
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<
stdio.h>
stdlib.h>
fcntl.h>
string.h>
sys/types.h>
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"
}
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<
dirent.h>
sys/stat.h>
intmain(intargc,char*argv[])
{DIR*dir;
intfd;
if((fd=mkdir("
/home/student/dir"
0644))==-1)
directorycreatedfailed!
"
if(chmod("
dir"
S_IXUSR|S_IXGRP|S_IXOTH)<
0)
chomd"
.实现两个进程间使用消息队列进行通信
//接受消息
unistd.h>
errno.h>
sys/msg.h>
#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);
}
//从队列中获取消息,直到遇到end消息为止
while(running)
{if(msgrcv(msgid,(void*)&
data,BUFIZE,msgtype,0)==-1)
{fprintf(stderr,"
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)
msgctl(IPC_RMID)failed\n"
exit(EXIT_FAILURE);
exit(EXIT_SUCCESS);
}return0;
//发送消息
#defineMAX_TEXT512
#defineBUFSIZE1024
structmsg_st{longintmsg_type;
chartext[MAX_TEXT];
{ntrunning=1;
charbuffer[BUFSIZE];
intmsgid=BUFSIZE;
//建立消息队列
//向消息队列中写消息,直到写入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"
//输入end结束if(strncmp(buffer,"
{running=0;
}sleep
(1);
}exit(EXIT_SUCCESS);
—2.上机调试课件中killrecever和killsender程序。
//killrecever
signal.h>
//SIGUSR1信号处理函数
voidCbSigUsr1(intsigno)
{//输出接收到的信号信息
\nreceivesignal=%d.\n"
signo);
voidma