1 文件的基本概念
在Unix/linux系统中,几乎所有的一切都可以看作文件,因此,对于文件的操作适用于各种输入输出设备等等,当然目录也可以看作文件
如:
/dev/null => 空设备
echo hello > /dev/null
=> 表示丢弃处理的结果
cat /dev/null > a.txt
=> 表示清空文件a.txt
2 文件相关的读写函数(重点)
复习标C:
fopen()/fclose()/fread()/fwrite()/fseek()
(1)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);// 打开新文件时用的,因为只有创建新文件时才需要加mode参数
int creat(const char *pathname, mode_t mode);// 创建一个文件
以第二个open函数为例,解析如下:
第一个参数:字符串形式的文件路径和文件名
第二个参数:操作标志 (针对于生成的文件描述符而说的)
必须包含以下访问模式中的一种:
O_RDONLY - 只读
O_WRONLY - 只写
O_RDWR - 可读可写
还可以按位或以下的标志值:
O_APPEND - 追加,写入到文件的尾部
O_CREAT - 文件不存在则创建,存在则打开(单纯的打开)
O_EXCL - 与O_CREAT搭配使用,如果文件存在则open/创建失败
O_TRUNC - 若文件存在、且打开权限中有写,则将文件中的内容清空
第三个参数:操作模式,权限 (针对于文件而说的)
当创建新文件时,需要指定的文件权限,
如:
0644 => rw-r--r--
返回值:成功返回新的文件描述符,失败返回-1
描述符就是一个小的非负整数,用于表示当前文件
函数功能:主要用于打开/创建 一个 文件/设备
结果解析:
01str.c
文件名
其中:
文件类型中:
- 表示普通文件
d 表示目录文件
文件权限中:
r 表示读权限
w 表示写权限
x 表示执行权限
- 表示没有此权限
(2)close函数
#include <unistd.h>
int close(int fd);
函数功能:
主要用于关闭参数fd指定的文件描述符,也就是让描述符fd不再关联任何一个文件,以便于下次使用
(3)read函数
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
第一个参数:文件描述符(从哪里读)
第二个参数:缓冲区的首地址(存到哪里去)
第三个参数:读取的数据大小
返回值:成功返回读取到的字节数,返回0表示读到文件尾
失败返回-1
函数功能:表示从指定的文件中读取指定大小的数据
(4)write函数
#include <unistd.h>
ssize_t write(int fd,const void *buf,size_t count);
第一个参数:文件描述符(写入到哪里去)
第二个参数:缓冲区的首地址(数据从哪里来)
第三个参数:写入的数据大小
返回值:成功返回写入的数据大小,0表示没有写入,
失败返回-1
函数功能:表示将指定的数据写入到指定的文件中
注意:
read和write函数一般默认以二进制形式进行读写操作
练习:
(1)vi 06emp_write.c文件,定义一个员工的信息并且进行初始化,将该员工的信息写入到文件emp.dat中,员工信息有:员工的编号、姓名、年龄、薪水
(2)vi 06emp_read.c文件,读取文件emp.dat中的员工信息,然后将员工信息打印出来
(5)lseek函数
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd,off_t offset,int whence);
第一个参数:文件描述符(表示在哪个文件中操作)
第二个参数:偏移量(正数表示向后偏移,负数向前偏移)
第三个参数:起始位置(从什么地方开始偏移)
SEEK_SET - 文件开头位置
SEEK_CUR - 文件当前位置
SEEK_END - 文件结尾位置
返回值:成功返回距离文件开头位置的偏移量,
失败返回-1
函数功能:主要用于调整文件的读写位置
注意:
文件末尾位置指的是文件中最后一个字符的下一个位置
在Unix/linux系统中,几乎所有的一切都可以看作文件,因此,对于文件的操作适用于各种输入输出设备等等,当然目录也可以看作文件
如:
/dev/null => 空设备
echo hello > /dev/null
=> 表示丢弃处理的结果
cat /dev/null > a.txt
=> 表示清空文件a.txt
2 文件相关的读写函数(重点)
复习标C:
fopen()/fclose()/fread()/fwrite()/fseek()
(1)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);// 打开新文件时用的,因为只有创建新文件时才需要加mode参数
int creat(const char *pathname, mode_t mode);// 创建一个文件
以第二个open函数为例,解析如下:
第一个参数:字符串形式的文件路径和文件名
第二个参数:操作标志 (针对于生成的文件描述符而说的)
必须包含以下访问模式中的一种:
O_RDONLY - 只读
O_WRONLY - 只写
O_RDWR - 可读可写
还可以按位或以下的标志值:
O_APPEND - 追加,写入到文件的尾部
O_CREAT - 文件不存在则创建,存在则打开(单纯的打开)
O_EXCL - 与O_CREAT搭配使用,如果文件存在则open/创建失败
O_TRUNC - 若文件存在、且打开权限中有写,则将文件中的内容清空
第三个参数:操作模式,权限 (针对于文件而说的)
当创建新文件时,需要指定的文件权限,
如:
0644 => rw-r--r--
返回值:成功返回新的文件描述符,失败返回-1
描述符就是一个小的非负整数,用于表示当前文件
函数功能:主要用于打开/创建 一个 文件/设备
扩展:
结果解析:
- rw- rw- r-- 1
属主权限 属组权限 其他用户权限 硬链接数
tarena tarena 1076 6月 4 10:43
属主名称 属组名称 文件大小 文件最后一次修改时间01str.c
文件名
属组用户:由于在linux系统中用许多的用户,然后系统会将用户分组,和属主用户属于同一组的用户叫做属组用户。
属主用户:Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。当前的用户是属主
其中:
文件类型中:
- 表示普通文件
d 表示目录文件
文件权限中:
r 表示读权限
w 表示写权限
x 表示执行权限
- 表示没有此权限
(2)close函数
#include <unistd.h>
int close(int fd);
函数功能:
主要用于关闭参数fd指定的文件描述符,也就是让描述符fd不再关联任何一个文件,以便于下次使用
(3)read函数
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
第一个参数:文件描述符(从哪里读)
第二个参数:缓冲区的首地址(存到哪里去)
第三个参数:读取的数据大小
返回值:成功返回读取到的字节数,返回0表示读到文件尾
失败返回-1
函数功能:表示从指定的文件中读取指定大小的数据
(4)write函数
#include <unistd.h>
ssize_t write(int fd,const void *buf,size_t count);
第一个参数:文件描述符(写入到哪里去)
第二个参数:缓冲区的首地址(数据从哪里来)
第三个参数:写入的数据大小
返回值:成功返回写入的数据大小,0表示没有写入,
失败返回-1
函数功能:表示将指定的数据写入到指定的文件中
注意:
read和write函数一般默认以二进制形式进行读写操作
练习:
(1)vi 06emp_write.c文件,定义一个员工的信息并且进行初始化,将该员工的信息写入到文件emp.dat中,员工信息有:员工的编号、姓名、年龄、薪水
(2)vi 06emp_read.c文件,读取文件emp.dat中的员工信息,然后将员工信息打印出来
(5)lseek函数
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd,off_t offset,int whence);
第一个参数:文件描述符(表示在哪个文件中操作)
第二个参数:偏移量(正数表示向后偏移,负数向前偏移)
第三个参数:起始位置(从什么地方开始偏移)
SEEK_SET - 文件开头位置
SEEK_CUR - 文件当前位置
SEEK_END - 文件结尾位置
返回值:成功返回距离文件开头位置的偏移量,
失败返回-1
函数功能:主要用于调整文件的读写位置
注意:
文件末尾位置指的是文件中最后一个字符的下一个位置