人人范文网 范文大全

linux知识点总结

发布时间:2020-03-03 07:33:28 来源:范文大全 收藏本文 下载本文 手机版

七: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 #define ERR_EXIT(m)

do {

perror(m);

exit(EXIT_FAILURE);

} while(0)

int main(int argc, char *argv[]) {

int pipefd[2];

if (pipe(pipefd) == -1)

ERR_EXIT(\"pipe error\");

pid_t pid;

pid = fork();

if (pid == -1)

ERR_EXIT(\"fork error\");

if (pid == 0)

{

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

close(pipefd[1]);

close(pipefd[0]);

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

fprintf(stderr, \"error execute ls\\n\");

exit(EXIT_FAILURE);

}

dup2(pipefd[0], STDIN_FILENO);

close(pipefd[0]);

close(pipefd[1]);

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

fprintf(stderr, \"error execute wc\\n\");

exit(EXIT_FAILURE);

return 0; } 7.编写两个进程a和b,使用有名管道进行通信。a向b传送字符串“hello”,b接收并打印。 进程a: #include #include #include #include #include #include #define PATH \"./fifo\" #define SIZE 128

int main() {

umask(0);

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

理权限)

{

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

perror (\"mkefifo error\");

exit(0);

}

int fd = open (PATH,O_RDONLY);

if (fd

{

printf(\"open fd is error\\n\");

return 0; } 进程b: #include #include #include #include #include #include #define PATH \"./fifo\" #define SIZE 128 int main() { char Buf[SIZE]; while(1) {

printf(\"please Enter#:\"); fflush(stdout); //清空缓冲区,并把缓冲区的内容输出 ize_t s = read(0,Buf,sizeof(Buf)); //ize_t 一个类型 if (s

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

{

//失败或中断返回-1

perror(\"read is failed\");

exit(1);

}

else if(s==0)

{

printf(\"read is closed!\");

return 1;

}

else{

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

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

} } return 0; }

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

void mmapcopy(int fd, int size)

{

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;

}

int main(int argc, char **argv)

{

struct stat stat;

if (argc != 2)

{

printf(\"error.\\n\");

exit(0);

}

//int fd = atoi(*argv[1]);

//mmap()

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

if (fd

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

fstat(fd, &stat);

mmapcopy(fd, stat.st_size);

//while(1);

close(fd);

exit(0);

}

嵌入式linu学习心得

总结知识点

知识点总结

知识点总结

高中生物知识点总结

市场营销总结知识点

比例知识点总结

二上知识点总结

词汇学知识点总结

管理信息系统知识点总结

linux知识点总结
《linux知识点总结.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档