linux知识点总结.docx

上传人:b****5 文档编号:30116012 上传时间:2023-08-05 格式:DOCX 页数:9 大小:17.58KB
下载 相关 举报
linux知识点总结.docx_第1页
第1页 / 共9页
linux知识点总结.docx_第2页
第2页 / 共9页
linux知识点总结.docx_第3页
第3页 / 共9页
linux知识点总结.docx_第4页
第4页 / 共9页
linux知识点总结.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

linux知识点总结.docx

《linux知识点总结.docx》由会员分享,可在线阅读,更多相关《linux知识点总结.docx(9页珍藏版)》请在冰豆网上搜索。

linux知识点总结.docx

linux知识点总结

七:

file

1.叙述linux的文件系统框架,并解释其中各个部分。

boot:

启动相关的程序和配置

bin:

常用的Linux命令,这些命令通常为可执行文件或这些文件的链接

sbin:

通常为根用户准备的命令

lib:

系统常用库

usr:

用户安装的文件、库、开发库等

root:

根用户的用户文件

home:

普通用户的用户文件

etc:

系统或程序的配置文件

var:

系统中服务器数据、日志

proc:

系统状态信息

dev:

系统设备

mnt、media:

其他分区的挂载点(如Windows磁盘分区、光盘或软件等)

tmp:

临时文件

lost+found磁盘孤立扇区

2.叙述超级块、inode、dentey和file四大数据结构的作用和主要内容。

超级块:

作用:

代表了整个文件系统,记录了文件系统的整体信息

内容:

文件系统的状态、文件系统类型、块大小、区块数、索引节点数、脏标志、操作方法

inode(索引节点)

作用:

代表了操作系统中的一个文件,无论该文件是否被打开,它都包含了文件操作的所有信息

内容:

文件大小,设备标识符,用户标识符,用户组标识符,文件模式,扩展属性,文件读取或修改的时间戳,链接数量,指向存储该内容的磁盘区块的指针,文件分类等等。

dentey(目录项):

作用:

代表了一个目录,用来组成文件的路径,并利用其实现路径的管理

内容:

包括该目录对象对应的索引节点,子目录链表,父目录目录项对象,与它同级的目录的目录项对象链表,使用计数,缓存标志

file(文件):

作用:

代表了被进程打开的文件,是可以读写的实体

内容:

包括相应的目录项对象、使用计数、访问模式、当前偏移量、操作方法等

3.什么是文件描述符?

它与fopen返回的文件指针有什么关系?

文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。

关系:

fopen返回的文件指针是文件描述符所指向的文件描述符表中的一个表项

4.分别叙述fopen和open的参数设置以及它们的区别。

fopen参数:

path是指定的文件的路径,mode是文件的打开模式,模式可以为r、r+、w、w+、a、a+

open参数:

pathname是欲打开文件的路径,flags是一些标志位,mode是文件的操作权限。

区别:

(1)open返回一个文件描述符(int),fopen返回一个文件指针(FILE*)。

(2)open无缓冲,fopen有缓冲。

(3)open与read,write等配合使用,fopen与fread,fwrite等配合使用。

(4)fopen是在open的基础上扩充而来的,在大多数情况下,用fopen。

5.叙述pipe和mkfifo两种管道函数的区别。

pipe创建匿名管道,mkfifo创建有名管道。

pipe管道是进程通信的一种形式,mkfifo管道被看作是一个文件

6.使用匿名管道技术,编程实现“ls-1|wc-l”。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#defineERR_EXIT(m)

do{

perror(m);

exit(EXIT_FAILURE);

}while(0)

intmain(intargc,char*argv[])

{

intpipefd[2];

if(pipe(pipefd)==-1)

ERR_EXIT("pipeerror");

pid_tpid;

pid=fork();

if(pid==-1)

ERR_EXIT("forkerror");

if(pid==0)

{

dup2(pipefd[1],STDOUT_FILENO);//输出重定向

close(pipefd[1]);

close(pipefd[0]);

execlp("ls","ls","-1",NULL);

fprintf(stderr,"errorexecutels\n");

exit(EXIT_FAILURE);

}

dup2(pipefd[0],STDIN_FILENO);

close(pipefd[0]);

close(pipefd[1]);

execlp("wc","wc","-1",NULL);

fprintf(stderr,"errorexecutewc\n");

exit(EXIT_FAILURE);

return0;

}

7.编写两个进程a和b,使用有名管道进行通信。

a向b传送字符串“hello”,b接收并打印。

进程a:

#include

#include

#include

#include

#include

#include

#definePATH"./fifo"

#defineSIZE128

intmain()

{

umask(0);

if(mkfifo(PATH,0666|S_IFIFO)==-1)//创建有名管道,mkfifo(管道文件名,管>理权限)

{//成功返回0失败返回-1

perror("mkefifoerror");

exit(0);

}

intfd=open(PATH,O_RDONLY);

if(fd<0)

{

printf("openfdiserror\n");

return0;

}

进程b:

#include

#include

#include

#include

#include

#include

#definePATH"./fifo"

#defineSIZE128

intmain()

{

charBuf[SIZE];

while

(1)

{

printf("pleaseEnter#:

");

fflush(stdout);//清空缓冲区,并把缓冲区的内容输出

ssize_ts=read(0,Buf,sizeof(Buf));//ssize_t一个类型

if(s<0)//read(文件标识符,数据缓冲区,读取数据尺寸)

{//失败或中断返回-1

perror("readisfailed");

exit

(1);

}

elseif(s==0)

{

printf("readisclosed!

");

return1;

}

else{

Buf[s]='\0';//最后一位,字符串结束符

write(fd,Buf,strlen(Buf));//write(文件表识符,数据缓冲区,写入文件尺寸)

}

}

return0;

}

 

7.编程以可读写方式打开第一个参数表示的二进制文件,改写里面第三个字节为0fH,再关闭它。

八:

mem

1.叙述进程的用户空间和内核空间都有哪些种类,列举各类内存申请函数并说明之。

代码区、静态数据变量、堆区、栈区

用户空间用vmalloc/malloc分配内存,内核空间用kmalloc/vmalloc分配内存。

malloc:

是动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,函数声明void *malloc(size_t size);

vmalloc/kmalloc:

在设备驱动程序或者内核模块中动态开辟内存,释放内存用的是kfree,vfree,kmalloc分配的内存是物理上的连续,vmalloc分配的内存只是线性上的连续。

4.编写两个进程a和b,使用mmap进行通信,a向共享内存写入字符串“hello”后退出,b接收后打印出来。

5.编写一个程序,创建一个子进程,之后父子进程使用mmap函数进行匿名通讯,子进程向共享内存写入字符串“hello”后退出,父进程接收后打印出来,并且等待子进程退出后结束。

#include

#include

#include

#include

#include

#include

#include

#include

voidmmapcopy(intfd,intsize)

{

char*bufp;

//void*start_addr=0;

//start_addr=(void*)0x80000;

bufp=mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

if(bufp==(void*)-1)

fprintf(stderr,"mmap:

%s\n",strerror(errno));

memcpy(bufp,"Linuxdd",7);

write(1,bufp,size);

munmap(bufp,size);

return;

}

intmain(intargc,char**argv)

{

structstatstat;

if(argc!

=2)

{

printf("error.\n");

exit(0);

}

//intfd=atoi(*argv[1]);

//mmap()

intfd=open(argv[1],O_RDWR,0);//O_RDWR才能被读写。

if(fd<0)

fprintf(stderr,"open:

%s\n",strerror(errno));//使用异常检查是个好习惯,他可以帮助程序员迅速定位出错的地方!

fstat(fd,&stat);

mmapcopy(fd,stat.st_size);

//while

(1);

close(fd);

exit(0);

}

 

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

当前位置:首页 > 解决方案 > 商业计划

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

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