Unix-第三章文件操作

文件系统
在linux下面 一切设备皆文件
open/read/write/ioctl/close

C语言标准库里 操作文件的函数
fopen fread fwrite fclose ftell fseek fprintf fscanf fputs fgets …
FILE * 文件指针 结构体指针

open 打开 或者 创建并打开文件
create 创建新文件
close 关闭文件
read 读文件
write 写文件
lseek 调整文件读写位置
fcntl 文件属性控制

unlink 删除硬链接
rmdir 删除空目录
remove 删除硬链接 或者 空目录

mmap( ,int fd,off_t offset);

文件描述符
1.非负整数
2.打开一个文件就会相对应产生一个文件描述符
3.通过open函数返回  被内核空间记录
4.每个进程会默认提供三个文件描述符
	0   STDIN_FILENO
	1   STDOUT_FILENO
	2   STDERR_FILENO

	stdin       标准输入
	stdout      标准输出 
	stderr      标准错误输出

	int open(const char *pathname, int flags);
	int open(const char *pathname, int flags, mode_t mode);
	
	int open(const char *pathname, int flags,...);
	flag:
		O_RDONLY
		O_WRONLY
		O_RDWR
		
		O_CREAT
			O_EXCL   如果文件存在则失败
			O_TRUNC  清空
		O_APPEND
	mode_t:
		权限
		rwx   7
		rw-   6
		r-x   5
		r--   4
		-wx   3
		-w-   2
		--x   1
		---   0
		属主 组 其它

非 非阻塞
阻 阻塞
同 同步
异 异步

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

size_t fwrite(const void *buf,size_t size,size_t nmemb,FILE *fp);  

off_t fssek(FILE *fp,off_t offset,int whence);
off_t lseek(int fd, off_t offset, int whence);
	whence:
		SEEK_SET
		SEEK_CUR
		SEEK_END
		
ssize_t read(int fd, void *buf, size_t count);
C语言标准库里 操作文件的函数 

fopen fread fwrite fclose ftell fseek fprintf fscanf fputs fgets …
底层实现open/read/write/fcntl/close/lseek/…

输出缓存区
输入缓存区
提升读写效率 降低了实时性

程序写 ->fwrite->缓存区(到达一定情况下)->write->磁盘文件

程序写 ->write->磁盘文件
write用户态
写入磁盘 内核态

每一次调用write都会进行用户态和内核态的切换 频繁地进行用户态和内核态场景的切换

time 命令 可以测试 程序在运行所需要时间
real 总执行时间
user 用户空间执行时间
sys 内核空间执行时间
real = user+sys

strace 命令 跟踪系统调用
size 命令
text 代码区大小
data 数据段大小
bss bss区大小
dec 上面三个总大小 十进制
hex 十六进制总大小
filename 文件名

nm
ldd
ldconfig
objdump
strip

I/O input output 输入/输出
ftell fseek --> lseek

int fcntl(int fd, int cmd, … /* arg */ );

文件锁 (对不同的进程才有意义):
读锁 F_RDLCK: 共享锁 可以上很多读锁
写锁 F_WRLCK: 独占锁 只允许上一把写锁 不能再上读锁 和 写锁

解锁 F_UNLCK

同一个进程可以上任意把任意锁

linux文件系统
一切设备皆文件
open/close/read/write/fcntl/ioctl
unix c 知识体系 理论知识

文件描述符
非负整数
进程为记录每一个打开的文件

fcntl
	F_DUPFD
	F_GETFL
	F_SETFL
	F_GETLK  测试锁  测试是否可以上锁  把锁的状态更新为F_UNLCK表示可以上锁  返回锁的信息
	F_SETLK  上锁  立即返回
	F_SETLKW 上锁直到成功

struct flock{
	l_type       锁类型:F_RDLCK   F_WRLCK    F_UNLCK
	l_whence     锁的起始参考位置  SEEK_SET  SEEK_CUR   SEEK_END
	l_start      偏移参数位置的距离  
	l_len        锁的长度      0 到文件末尾
	l_pid        上锁的进程号  -1自动填充
}

fcntl(fd,F_GETFL,struct flock *lock)

读锁 共享锁
写锁 独占锁

同步(上锁):
访问有先后顺序
异步(没上锁):
各自干各自的

权限屏蔽码
普通文件默认的权限0666(rw-rw-rw-) - 权限屏蔽码(0000)
0666-0441 = 0226 rw- --x
-w–w-rw-

umask 0331 设置权限屏蔽码
chmod u/g/o + rwx 0777

进程: 一个程序运行之后

终端:是一个进程
父子进程
在终端上运行一个程序
终端 父进程
a.out 子进程 (继承父进程的权限屏蔽码)

stat  fstat   lstat
chown  fchown lchown

int open(const char *pathname, int flags, mode_t mode);//创建文件并打开
int creat(const char *pathname, mode_t mode);//创建文件并打开
int mkdir(const char *pathname, mode_t mode);//创建空目录
int rmdir(const char *pathname);//删除空目录  (不能删除非空目录)
int link(const char *oldpath, const char *newpath);//创建硬链接
int unlink(const char *pathname);//删除硬链接
int remove(const char *pathname);//删除文件和unlink一样,删除目录和rmdir一样
int rename(const char *oldpath, const char *newpath);//修改目录或文件名字

int symlink(const char *oldpath, const char *newpath);
ssize_t readlink(const char *path, char *buf, size_t bufsiz);


char *getcwd(char *buf, size_t size);
char *getwd(char *buf);
char *get_current_dir_name(void);

open打开目录是可以的 但不能进行读写
文件描述符 可以用于 fstat fchown fchdir fdopendir

•opendir/fdopendir: 打开目录流
•closedir: 关闭目录流
•readdir: 读取目录流
•rewinddir: 复位目录流
•telldir: 获取目录流当前位置
•seekdir: 设置目录流当前位置

文件系统
open/create/read/write/fcntl/close
dup/dup2
async/fsync/fdatasync

文件锁
读锁 共享锁
写锁 独占锁

锁对于不同的进程才有作用

stat/fstat/lstat
access
umask
代表了一种设计理念:永远成功 返回旧的 (做完事情已后 用于恢复)

chmod fchmod
chowd fchowd lchowd

symlink readlink

mkdir
rmdir
link
unlink
remove
rename

truncate ftruncate

chdir fchdir getcwd

opendir
fdopendir
readdir
closedir
rewinddir
seekdir
telldir

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值