linu复习资料Word文档下载推荐.docx

上传人:b****0 文档编号:13460383 上传时间:2022-10-10 格式:DOCX 页数:17 大小:306.51KB
下载 相关 举报
linu复习资料Word文档下载推荐.docx_第1页
第1页 / 共17页
linu复习资料Word文档下载推荐.docx_第2页
第2页 / 共17页
linu复习资料Word文档下载推荐.docx_第3页
第3页 / 共17页
linu复习资料Word文档下载推荐.docx_第4页
第4页 / 共17页
linu复习资料Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

linu复习资料Word文档下载推荐.docx

《linu复习资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《linu复习资料Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

linu复习资料Word文档下载推荐.docx

-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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1