UC学习day05 内存管理 文件基本操作

一 内存管理
cat /proc/进程的pid/maps
$$ 获取当前进程的pid
什么是进程的pid.进程的身份证号就是进程的pid.
如何获取进程的pid?
getpid(2)
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);

pid_t getppid(void);

栈段的概念

栈帧的概念
每个函数都有自己的栈帧.
函数调用的时候有栈帧,函数调用完毕和函数对应的栈帧也就消失了.
从函数调用到函数的结束 函数的生命周期

如果变量的空间分配在栈帧里,变量的定义执行的时候,为变量分配空间,函数结束的时候,这种变量的空间被回收.变量结束了.
变量的生命周期
局部变量 形参

进程的生命周期
从进程开始执行到进程执行完毕

变量的作用域

变量的作用域和生命周期
全局变量 静态的局部变量 数据段 进程
自动的局部变量 形参 栈帧 函数

二 文件的基本操作
库函数 对文件操作 fopen(3) fclose(3) fgetc(3) fputc(3) fseek(3)

系统调用 对文件操作 open(2) read(2) write(2) close(2) lseek(2)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags,…);
功能:打开并且可能创建一个文件
参数:
pathname:指定了要打开的文件的路径
flags:
三选一:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 可读可写
文件的创建标记和身份标记可以按位或到flags中
文件创建标记
O_CREAT 文件不存在,创建文件.当这个创建标记出现在flags中的时候,mode必须被提供.mode代表新建文件的权限.
mode最终的结果可能被修改.被进程的umask.(mode & ~umask)

O_EXCL 如果和O_CREAT一起被指定在flags中,创建的文件存在的时候,报错.
O_TRUNC 如果文件存在,将文件的内容清空为0

文件的身份标记
O_APPEND 以追加方式打开文件.打开文件的时候,写之前文件的读写位置被定位在文件的末尾.

mode:指定了新建文件的权限
返回值:
错误 -1 errno被设置
成功 返回新的文件描述符 当前进程未使用的最小的文件描述符

补充知识点:
…:可变参数.参数的个数和类型取决于…前边的那个参数.
int printf(const char *format, …);
printf(“hello world”);
printf(“name=%s\n”,name);
printf(“name=%s\tval=%d\n”,name,val);

文件描述符?
文件描述符是一个>=0的整数
进程 进程其实就是程序运行过程中,对计算机资源使用的描述.
每个进程都有自己的pid.每个进程也有自己的户口本.(PCB)process
control block

0 标准输入 键盘 STDIN_FILENO
1 标准输出 显示器 STDOUT_FILENO
2 标准错误输出 显示器 STDERR_FILENO

文件的权限
-rw-rw-r-- 1 tarena tarena 0 Mar 27 16:10 tt
最前边的字符代表文件的类型

  • 普通文件
    d 文件夹文件
    b 块设备文件
    c 字符设备文件
    p 管道文件
    s socket类型的文件
    l 软链接文件

rw-rw-r–
r读 w 写 x 可执行
有三组rwx.第一组代表文件拥有者的权限 属主 u
第二组代表属组的权限 g
第三组代表其他人的权限 o
a=u+g+o
chmod a-x file

rwx rw-rw-r–
111 110110100 0664

进程的umask
umask权限掩码
0002
-------w-
000000010

rw-rw-rw-
-------w-
rw-rw-r–

rw-rw-rw-
r–r--r–
-w–w--w-

0666 0002
mode&~umask
000000010
111111101
110110110
110110100

close(2)
#include <unistd.h>
int close(int fd);
功能:关闭一个文件描述符
参数:
fd 指定要关闭的文件描述符
返回值:
成功 0
错误 -1 errno被设置为相应的错误码

上一篇:python day05


下一篇:(day05—06)获得鼠标的坐标