Linux文件目录操作
1.基于文件指针的文件操作(有缓冲)
1.1文件的创建,打开
FILE *fopen(const char *path,const char *mode); //文件名 模式
功能:以mode的方式打开或创建文件。
参数:
Path:文件名(文件路径)。
Mode:文件打开方式(访问属性)。
Mode | 打开方式 |
---|---|
r | 打开只读文件,该文件必须存在。 |
r+ | 打开可读写的文件,该文件必须存在。 |
w | 打开只写文件,若文件存在则文件长度清为 0,即该文件内容会消失。若文件不存在则建立该文件。 |
w+ | 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 |
a+ | 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 |
返回值:打开成功,将返回一个文件指针;打开失败,则返回 NULL。
1.2文件的关闭
int fclose(FILE *stream);
功能:关闭一个文件流。
参数:一个指向文件的指针或者流,就是fopen函数的返回值。
返回值:打开成功,0;打开失败,-1。
1.3文件的读写
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
fread 从文件流 stream 中读取 nmemb 个元素,写到 ptr 指向的内存中,每个元素的大小为 size 个字节。
fwrite 从 ptr 指向的内存中读取 nmemb 个元素,写到文件流 stream 中,每个元素 size 个字节。
返回值:读取成功,返回实际读取的字节数;失败,返回-1。
1.4文件格式化读写
int fprintf(FILE *stream, const char *format, ...);
int fscanf(FILE *stream, const char *format, …);
功能:
fprintf:往文件stream里面送经过format格式化的内容;
fscanf:从文件stream里面读取内容,经过format格式化处理,送给变量;
返回值:成功返回输入的字符数;错误返回负数(错误码)。
1.5文件点位原型
//通常的用法为 while(!feof(fp)),到达文件末尾返回EOF
int feof(FILE * stream);)//设置当前读写点到偏移whence长度为offset处
int fseek(FILE *stream, long offset, int whence);//用来获得文件流当前的读写位置
long ftell(FILE *stream);//把文件流的读写位置移至文件开头
void rewind(FILE *stream);
参数:
stream:文件指针
offset:距离参考点的位移
whence:参考点的位置,可以是:
whence | 位置 |
---|---|
SEEK_SET | 文件开头 |
SEEK_CUR | 文件当前位置 |
SEEK_END | 文件末尾 |
返回值:feof 判断是否到达文件末尾的下一个(注意到达文件末尾之后还会做一次)。
例子:用文件指针的方式往文件写一些内容,并且读出来。
#include <stdio.h>int main(void)
{FILE *fp;int ret = 0;unsigned char write_bufs[]="This is my first file!";unsigned char read_buf[20]="0";fp = fopen("./a.txt","a+b");if(fp == NULL){printf("open error!\r\n");return -1;}ret = fwrite(write_bufs,1, sizeof(write_bufs),fp);if(ret == 0 ){printf("fwrite error!\r\n");fclose(fp);return -1;}ret = fseek(fp,0, SEEK_SET);if(ret < 0){printf("fseek error!\r\n");fclose(fp);return -1;}ret = fread(read_buf,1,sizeof(write_bufs),fp);printf("read_buf=%s\r\n",read_buf);fclose(fp);
}
2.基于文件描述符的文件操作(非缓冲)
2.1打开或者创建文件
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:打开文件
参数:
pathname:文件名,包括路径。比如:“./a.c”。
flags:文件打开方式
flags掩码 | 打开方式 |
---|---|
O_RDONLY | 以只读的方式打开。 |
O_WRONLY | 以只写的方式打开。 |
O_RDWR | 以读写的方式打开。 |
O_CREAT | 如果文件不存在,则创建文件。 |
O_EXCL | 仅与 O_CREAT 连用,如果文件已存在,则强制 open 失败。 |
O_TRUNC | 如果文件存在,将文件的长度截至0(重新设置文件大小为0)。 |
O_APPEND | 以追加的方式打开文件,每次调用write时,文件指针自动先移到文件尾。常用于多进程写同一个文件的情况。 |
O_NONBLOCK | 非阻塞方式打开,无论有无数据读取或等待,都会立即返回进程之中。 |
O_NODELAY | 非阻塞方式打开。 |
O_SYNC | 同步打开文件,只有在数据被真正写入物理设备设备后才返回。 |
mode:文件访问权限
mode掩码 | 访问权限 |
---|---|
S_IRWXU (00700) | 代表该文件所有者具有可读、可写及可执行的权限。 |
S_IRUSR或S_IREAD (00400) | 代表该文件所有者具有可读取的权限。 |
S_IWUSR或S_IWRITE ( 00200) | 代表该文件所有者具有可写入的权限。 |
S_IXUSR或S_IEXEC ( 00100 ) | 代表该文件所有者具有可执行的权限。 |
S_IRWXG (00070 ) | 代表该文件用户组具有可读、可写及可执行的权限。 |
S_IRGRP (00040) | 代表该文件用户组具有可读取的权限。 |
S_IWGRP (00020 ) | 代表该文件用户组具有可写入的权限。 |
S_IXGRP (00010) | 代表该文件用户组具有可执行的权限。 |
S_IRWXO (00007 ) | 代表其他用户具有可读、可写及可执行的权限。 |
S_IROTH (00004) | 代表其他用户具有可读取的权限。 |
S_IWOTH ( 0000 2) | 代表其他用户具有可写入的权限。 |
S_IXOTH ( 00001) | 代表其他用户具有可执行的权限。 |
返回值:成功返回文件描述符;失败返回-1。
2.2关闭文件
int close(int fd);
功能:打开文件
参数:
fd:表示文件描述符,即open函数的返回值。
2.3读写文件
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
功能:
读函数:读取fd所指向的文件,读取count个字节,放到缓冲区buf中。
写函数:把buf里边的数据写到fd所指的文件,写count个字节。
参数:
fd:操作的文件的文件描述符。
buf:read读到的内容放到buf中。write写入的内容放在buf中。
count:读写的字节数。
返回值:读取完了之后,返回 0;出错返回-1;成果返回读写的字节数。
2.4文件的定位
off_t lseek(int fd, off_t offset, int whence);
功能:函数lseek将文件指针设定到相对于whence位置偏移值为 offset 的位置。
fd:需要定位的文件的文件描述符
offset:距离参考点的位移。
whence:参考点的位置,可以是:
whence | 位置 |
---|---|
SEEK_SET | 文件开头 |
SEEK_CUR | 文件当前位置 |
SEEK_END | 文件末尾 |
返回值:成功,返回相对文件头偏移的位置;失败,返回-1。
2.5获取文件信息
int stat(const char *file_name, struct stat *buf);
作用:函数获取文件信息,调用完毕后,文件信息被填充到结构体struct stat变量中。
参数:
file_name:需要获取信息的文件的文件名。
buf:作为传出文件信息的指针,存放文件信息。结构体 stat 的定义为:
struct stat {dev_t st_dev; /* 如果是设备,返回设备表述符,否则为 0 */ino_t st_ino; /* i节点号 */mode_t st_mode; /* 文件类型 */nlink_t st_nlink; /* 链接数 */uid_t st_uid; /* 属主 ID */gid_t st_gid; /* 组 ID */dev_t st_rdev; /* 设备类型*/off_t st_size; /* 文件大小,字节表示 */blksize_t st_blksize; /* 块大小*/blkcnt_t st_blocks; /* 块数 */time_t st_atime; /* 最后访问时间*/time_t st_mtime; /* 最后修改时间*/time_t st_ctime; /* 创建时间 */
};
返回值:获取成功,返回0 ;获取失败,返回-1。
例子:用文件描述符的方式往文件写一些内容,并且读出来。
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{int fd;char buf[32] = {0};fd = open("a.txt", O_RDWR);write(fd,"HELLO ",6);read(fd, buf, 6);printf("%s\n", buf);close(fd);return 0;
}
Linux文件目录操作相关推荐
- 你一定要知道的关于Linux文件目录操作的12个常用命令
博客园 首页 新随笔 联系 管理 订阅 随笔- 26 文章- 1 评论- 18 你一定要知道的关于Linux文件目录操作的12个常用命令 转自:http://www.cnblogs.com/yo ...
- linux文件目录操作实验报告,Linux操作系统实验4文件和目录操作
<Linux操作系统>课程实验报告 实验4 文件和目录操作 一.实验目的 1.理解Linux文件系统的结构和目录组织方式: 2.掌握Linux常用目录和文件命令的使用. 二.实验内容与要求 ...
- linux 文件目录操作,Linux系统下文件与目录操作
与其它操作系统一样,在Linux系统下用户的数据和程序也是以文件的形式保存的.所以在使用Linux的过程中,是经常要对文件与目录进行操作的.现在我们就以一个Window用户的立场来学习一下Linux下 ...
- linux复制文件到另一个目录_Linux入门之四-Linux文件目录操作
在服务器的运行维护当中我们需要经常性的对文件的目录结构进行查看.切换等操作,今天就来介绍一下这些操作的常用命令. pwd 这个命令是用于查看当前操作目录的绝对路径,使用方法为直接在Xshell黑窗中输 ...
- linux文件目录操作实验报告,实验 Linux文件和目录操作
实验Linux文件和目录操作(1) 一.实验内容 练习Linux文件和目录操作命令. 二.实验目的 掌握文件与目录管理命令 掌握文件内容查阅命令 三.实验题目 1. 文件与目录管理 (1) 查看Cen ...
- Linux文件目录操作指令
进入 home/itcast 目录 cd /home/itcast ls 显示目录内容: ls mkdir 创建一个目录 家庭A: mkdir familyA cd 切换目录 进入familyA 目 ...
- linux cat 递归目录,实验二 linux文件目录操作
一.实验步骤 1.练习cd.ls.pwd命令. 1.1输入mesg ,显示is y,表示可以给别人写信息,输入mesg n 后,关闭网络通讯,无法传递信息. 1.2 Pwd显示当前工作目录的绝对路径. ...
- Linux管道的原子性,管道的原子性 linux写操作原子性
从本质上说,管道也是一种文件,但他又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题 限制管道的大小.实际上,管道是一个固定大小的缓冲区.在Linux中该换冲区的大小为一页,4k 使得他的 ...
- Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
文件目录操作 ls 作用: 显示指定目录下的内容 语法: ls [-al] [dir] 说明: -a 显示所有文件及目录 (. 开头的隐藏文件也会列出) -l 除文件名称外,同时将文件型态(d表示目录 ...
最新文章
- Linux 基础 - 磁盘管理 -06
- 软件工程期末考试复习(四)
- 浅谈HashMap的实现原理
- eclipse打开当前文件夹
- 借教室(洛谷-P1083)
- 将两个数组河滨_【探索】苏州河两岸将新增12公顷公园绿地,四季皆有景
- 02_函数定义及使用函数
- 无法打开计算机桌面图标,桌面图标打不开如何修复?桌面图标无法打开的处理方法...
- 虚幻4--UE4是什么?
- 详解ZStack Cloud v4.0:自研VPC网络模型实践指南
- “钢铁大王”卡耐基:一步一个脚印的职场人
- 如何判断建设用地是否符合土地利用总体规划?
- 力扣-718最长重复子数组(dp)
- object-c中的对象的释放
- c语言程序设计常用思维,C语言程序设计中计算思维的思考①
- 推荐计划常见问题解答:有哪些问题是必须的?
- 仿网易云音乐源码html5
- DRF学习之短信验证的实现用户注册(十二)
- 通过邮件收发传真的方法与步骤
- 【深入kotlin】 - Flow 进阶