一、文件操作
1.相关概念
1.1**什么是文件?
简单说,文件就是存储在硬件磁盘上的数据集合。
1.2Linux系统中用什么来唯一标识一个文件?
文件描述符:系统中在处理的文件(读、写操作)的时候,需要唯一能够识别这个文件,就需要一个针对文件的标识,以便在其它地方能识别出这个文件,于是就产生了文件描述符。
系统会帮用户默认打开3个文件描述符:
0: 标准输入设备文件的描述符: STDIN_FILENO
1: 标准输出设备文件的描述符: STDOUT_FILENO
2: 标准错误设备文件的描述符: STDERR_FILENO
本质:** 文件描述符是一些整数,简单的说就是一个文件ID,用于在系统中唯一的标识一个文件。文件描述符的总数也就是系统可以打开文件的最多个数,这取决于系统的配置情况可打开的文件描述符总数可利用cat /proc/sys/fs/file-max 来查看。
文件类型,访问权限
1. 文件类型:
普通文件(-);目录文件(d);链接文件(l);设备文件(c);管道文件(p)
2. 访问权限:
读权限(r);写权限(w);可执行权限(x)
2.文件操作方式—系统调用(系统IO函数)
内核模式
void perror(const char *s); 输出错误信息
文件操作函数参考
2.1获取文件属性信息
int access(const char* pathname,int mode);<br />
2.2打开创建文件
int open(const char pathname, int flags);
int open(const char pathname, int flags, mode_tmode );
2.3读取文件内容
ssize_t read(int fd,void* buf,size_t count);
2.4写入文件内容
ssize_t write(int fd,void buf,size_t count);
char buf[] = {“Linux system programm”};
write(fd,buf,strlen(buf));
char buf1[64] = {“Hello”};
write(fd,buf1,strlen(buf));
char p = “Linux system programm”;
write(fd,p,strlen(p));
2.5关闭文件
2.6文件随机读写(移动文件位置指针)
off_t lseek(int fd,off_t offset,int whence);
2.7内存映射(文件映射)
void mmap(void addr,size_t length,int prot,int flags,int fd,off_t offset);
int munmap(void* addr,size_t length);
2.8文件状态信息获取(类型,权限,大小,创建时间)
int stat(const char path, structstat buf);
int fstat(intfd,structstat *buf);

文件状态结构体stat
struct stat{dev_t st_dev; //文件设备编号ino_t st_ino; //文件inode节点号mode_t st_mode; //文件类型,访问权限等nlink_t st_nlink; //文件的连接数uid_t st_uid; //文件所有者的用户IDgid_t st_gid; //文件所有者对应的组IDdev_t st_rdev; //若文件为设备文件,则表示设备编号off_t st_size; //文件大小,对应的文件字节数blksize_t st_blksize; //文件系统的 I/O 缓冲区大小blkcnt_t st_blocks; //占用文件区块数量,每一区块512 字节time_t st_atime; //文件最后一次被访问的时间time_t st_mtime; //文件内容最后一次被修改的时间time_t st_ctime; //最后一次改变时间(属性改变)};




3.文件操作方式—文件流(标准IO)
3.1为引入标准IO,什么要引入标准IO?
1)系统IO的频繁调用,会引起程序在用户模式与内核模式之间频繁切换,影响系统效率,引入标准IO,采用缓冲机制,减少系统IO的调用频率,提升效率;
2)跨平台使用,因为系统调用取决于系统,不同的系统,系统IO函数是不同的;
系统调用和标准IO库函数调用

