一、malloc的实现机制(缓冲机制)
库函数跟系统调用之间的关系
什么是缓冲?
内存分配的原理。 封装 函数A的实现代码中调用了函数B。函数B的功能是函数A主要的功能,这样就说函数A封装了函数B。 举例说明 malloc的实现机制(缓冲) 代码参见malloc.c
080f8-
33块 内存管理结束了 二、文件的操作(文件内容的操作) 文件的打开、关闭、读、写、读写位置的重定位
标c中 fopen() fclose() fread() fwrite() fseek()...
系统调用 open() close() read() write() lseek()
open()
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode); int open(const char *pathname, int flags,...);
功能:打开一个文件,有可能创建一个文件
参数:
pathname:指定要打开的文件的名字
flags: 三选一:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写 另外,可以按位或0个或多个创建标记和状态标记
O_CREAT: 如果文件不存在,创建文件。第三个参数mode指定了新文件的权限。新文件的权限为mode & ~umask O_EXCL:如果和O_CREAT在flags中被一起指定,文件存在,报错。 O_NOCTTY:
O_TRUNC:打开的文件存在,并且是一个普通文件,有写的权限,那么文件内容清空 O_APPEND:以追加方式打开文件,文件的都写位置被定位在文件的末尾。 ...:可变参数.可变参数的类型、个数取决于可变参数前边的那个参数。
返回值:
返回一个新的文件描述符
- 错误 errno被设置 补充: 文件描述符 小的 非负整数?
文件描述符是当前进程没有打开的、最小的文件描述符。 进程 程序运行的实例。每个进程都有自己的pid。每个进程还有自己的户口本,专业术语称作PCB (process control block) PCB中记录了进程使用到的资源。(软件资源 硬件资源)
struct task{ };
有一个成员记录了,这个进程打开的文件。 进程默认从bash继承0 2三个文件描述符
标准输入 键盘 STDIN_FILENO
标准输出 显示器 STDOUT_FILENO
标准错误输出 显示器 STDERR_FILENO 文件的类型
linux下一切皆文件。
-rw-rw-r-- tarena tarena 8月 : malloc.c - 普通文件
d 文件夹类型的文件
c 字符设备文件
b 块设备文件
s socket文件
p 管道文件
l 软链接文件 权限的问题
rw-rw-r-- 文件的权限
linux是一款多用户多任务的操作系统
所谓的多用户就是多个用户可以同时登陆操作系统,在操作系统上维护自己的工作。 老大 root
为每个用户指定了用户的地盘 用户工作主目录(家目录)~
把用户分成很多的组。一个用户可以属于多个组。一个用户组包含多个用户。 r read
w write
x execute 文件的拥有者 属主 u 属组 g
其他人 o
所有的用户 a 改变文件的权限
chmod 权限 文件的名字
权限的构成
u+x
u-x
g-w
g+w 可以使用数字表示权限。8进制的数据 umask是什么玩意?
umask是权限掩码 umask -------w- 创建文件的时候,将掩码中出现在权限位去除。 创建普通文件的时候。权限默认为是0666。
rw-rw-rw- 默认指定的权限 rw-rw-rw-
-------w- umask rwxrwxr-x
rw-rw-r-- 最终的权限 rw-rw-r-- mode&~umask ----wx-wx
rw-rw-rw-
rwxr--r--
rw-r--r-- close()
#include <unistd.h>
int close(int fd);
功能:关闭一个文件描述符
参数:
fd:指定要关闭的文件描述符
返回值:
- 错误 errno被设置
成功 举例说明
、以只读方式打开文件。代码参见r_file.c
注意:为了方便对文件的操作,将文件操作中使用的头文件进行封装。p_file.h 、以读写方式打开文件,文件不存在,创建文件,权限指定为0644.文件存在,报错,文件已经存在。
代码参见 rw_file.c 、以读写方式打开文件,文件不存在创建文件,指定文件的权限为0664。文件存在,将文件内容清空
代码参见 rw1_file.c read()/write()
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:从文件中读取数据
参数:
fd:指定了具体的文件,从这个文件里读取数据
buf:将读取的数据存放到buf指定的地址空间里
count:向系统申请的要读取的字节数
返回值:
返回的是实际读取到的字节数。0到达了文件的末尾。
- 错误 errno被设置 #include <unistd.h>
ssize_t write(int fd,const void *buf,size_t count);
功能:向文件写数据
参数:
fd:指定了具体的文件
buf:指定了内容存放的地址
count:指定了写入文件的字节数
返回值:
- 错误 errno被设置
返回写入文件中的字节数 举例说明 文件操作系统调用的使用 编写代码实现cat命令的功能。编译成可执行文件的名字为pcat
代码参见pcat.c 总结:
一、malloc的实现原理 缓冲机制
二、文件的操作
open close read write 三、使用mmap将文件映射到进程的虚拟地址,通过对内存里数据的修改,直接修改文件的内容。

malloc实现机制、缓冲机制、文件操作、mmap虚拟地址(day06)的更多相关文章

  1. Linux系统调用和ANSI C文件操作的区别

    一.在Linux下对文件操作有两种方式:Linux系统调用和ANSI C文件操作. 1.Linux系统调用调用常用于I/O文件操作,系统调用常用的函数有open.close.read.write.ls ...

  2. IOS学习之IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作(一) 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都 ...

  3. IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作   作者:totogo2010 ,发布于2012-9-21,来源:CSDN   目录: IOS学习之IOS沙盒(sandbox)机制和文件操作( ...

  4. IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)

    1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  5. iOS 沙盒(sandbox)机制和文件操作

    本文参看了 http://www.uml.org.cn/mobiledev/201209211.asp#1 这篇文章中的介绍,尊重原著. 1.IOS沙盒机制 IOS应用程序只能在本应用程序中创建的文件 ...

  6. iOS学习之iOS沙盒(sandbox)机制和文件操作(一)

    1.iOS沙盒机制 iOS应用程序仅仅能在为该改程序创建的文件系统中读取文件,不能够去其他地方訪问,此区域被成为沙盒,所以全部的非代码文件都要保存在此,比如图像,图标,声音,映像,属性列表,文本文件等 ...

  7. IOS开发-UI学习-沙盒机制&文件操作

    ž苹果为软件的运行提供了一个沙盒机制 每个沙盒含有3个文件夹:Documents, Library 和 tmp.因为应用的沙盒机制,应用只能在几个目录下读写文件 žDocuments:苹果建议将程序中 ...

  8. iOS学习之iOS沙盒(sandbox)机制和文件操作1

    iOS学习之iOS沙盒(sandbox)机制和文件操作 接上篇 iOS学习之iOS沙盒(sandbox)机制和文件操作(一) 我们看看如何获取应用程序沙盒目录.包括真机的沙盒的目录. 1.获取程序的H ...

  9. 九、Android学习第八天——广播机制与WIFI网络操作(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 九.Android学习第八天——广播机制与WIFI网络操作 今天熟悉了An ...

随机推荐

  1. java.text.ParseException: Unparseable date: &quot;2015-06-09 hh:56:19&quot;

    1.错误描写叙述 [DEBUG:]2015-06-09 16:56:19,520 [-------------------transcation start!--------------] java. ...

  2. Rust 中项目构建管理工具 Cargo简单介绍

    cargo是Rust内置的项目管理工具.用于Rust 项目的创建.编译.执行,同一时候对项目的依赖进行管理,自己主动推断使用的第三方依赖库,进行下载和版本号升级. 一.查看 cargo 版本号 安装R ...

  3. QueryString 地址栏参数

    MXS&Vincene  ─╄OvЁ  &0000002 ─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...

  4. oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/47448751 本文出自[我是干勾鱼的博客] oracle中使用impdp数据泵导 ...

  5. ZOJ 3814 Sawtooth Puzzle (2014年牡丹江赛区网络赛F题)

    1.题目描写叙述:点击打开链接 2.解题思路:本题是一道隐式图的搜索题目.一般来说,这类题目首先要定义状态,接下来是弄清楚状态怎样转移,以及状态怎样判重,怎样推断当前状态是否和目标状态同样.至于求解最 ...

  6. hdoj-看病要排队

    看病要排队 Problem Description 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看 ...

  7. iOS中的数据库—使用FMDB

    一.回顾 iOS中的数据存储方式 1.XML属性列表(plist) 写入OC的一些基本数据类型,不是所有对象都可以写入 2.Preference(偏好设置) 本质还是通过“plist”来存储数据,但是 ...

  8. spring 监听器 IntrospectorCleanupListener简介

    转自:https://blog.csdn.net/ywb201314/article/details/51144256 其中JavaBeans Introspector是一个类,位置在Java.bea ...

  9. [Apple开发者帐户帮助]四、管理密钥(1)创建私钥以访问服务

    私钥允许您访问和验证与某些应用服务(如APN,MusicKit和DeviceCheck)的通信.您将在对该服务的请求中使用JSON Web令牌(JWT)中的私钥. 所需角色:帐户持有人或管理员. 在“ ...

  10. 制作一个 JavaScript 小游戏

    简评: 作者学习了编程两个月,边学边做了一个 JavaScript 小游戏,在文中总结了自己在这个过程中的一些体会,希望能给其他初学者一些帮助. 对于很多想学编程但一直没下定决心的同学来说,最大的问题 ...