Smart210学习记录-------文件操作
一.linux文件操作(只能在linux系统上用)
创建:
int creat(const char* filename, mode_t mode)
filename 表示要创建的文件名,mode表示对该文件的读写权限
int umask(int newmask)
调用将 umask 设置为 newmask,然后返回旧的 umask,它只影响读、写和执行权限
S_IRUSR 用户可以读
S_IWUSR 用户可以写
S_IXUSR 用户可以执行
。。。等等
除了可以通过上述宏进行“或”逻辑产生标志以外,我们也可以自己用数字来表示,Linux
用 5 个数字来表示文件的各种权限:第一位表示设置用户 ID;第二位表示设置组 ID;第三位表
示用户自己的权限位;第四位表示组的权限;最后一位表示其他人的权限。每个数字可以取 1(执
行权限)、2(写权限)、4(读权限)、0(无)或者是这些值的和。例如,要创建一个用户可读、
可写、可执行,但是组没有权限,其他人可以读、可以执行的文件,并设置用户 ID 位。那么,
我们应该使用的模式是 1(设置用户 ID)、0(不设置组 ID)、7(1+2+4,读、写、执行)、0(没
有权限)、5(1+4,读、执行)即 10 705:
打开:
int open(const char* filename, int flags)
int open(const char* filename, int flags, mode_t mode)
open()函数有两个形式,其中 pathname 是我们要打开的文件名
O_RDONLY 以只读的方式打开文件
O_WRONLY 以只写的方式打开文件
O_RDWR 以读写的方式打开文件
O_APPEND 以追加的方式打开文件
O_CREAT 创建一个文件 //使用第二种形式
O_EXEC 如果使用了 O_CREAT 而且文件已经存在,就会发生一个错误
O_NOBLOCK 以非阻塞的方式打开一个文件
O_TRUNC 如果文件已经存在,则删除文件的内容
open("test", O_CREAT, 10 705) 创建一个text文件并且打开它,对它的权限用户ID读写,组ID没权限,用户自己读写运行。。。。
如果文件打开成功,open 函数会返回一个文件描述符,以后对该文件的所有操作就可以通过
对这个文件描述符进行操作来实现。
读写;
int read(int fd, const void* buf, size_t length)
int write(int fd, const void *buf, size_t length)
返回值为实际写入的字节数
fd:open函数返回的文件描述符
buf length 顾名思义
定位:
对于随机文件,我们可以随机地指定位置读写,使用如下函数进行定位:
int lseek(int fd, offset_t offset, int whence)
fd:文件描述符
offset:相对于whence的偏移量
whence:SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置
SEEK_END:相对文件末尾
关闭:
int close(int fd)
当我们操作完成以后,我们要关闭文件了,只要调用 close 就可以了,其中 fd 是我们要关闭
的文件描述幅
范例:
1 #include <sys/types.h>
2 #include <sys/stat.h>
3 #include <fcntl.h>
4 #include <stdio.h>
5 #define LENGTH 100
6 main()
7 {
8 int fd, len;
9 char str[LENGTH];
10
11 fd = open("hello.txt", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); /*
12 创建并打开文件 */
13 if (fd) {
14 write(fd, "Hello World", strlen("Hello World")); /*
15 写入字符串 */
16 close(fd);
17 }
18
19 fd = open("hello.txt", O_RDWR);
20 len = read(fd, str, LENGTH); /* 读取文件内容 */
21 str[len] = '\0';
22 printf("%s\n", str);
23 close(fd);
24 }
二.c库文件操作(C库函数的文件操作实际上是独立于具体的操作系统平台的,不管是在DOS、Windows、Linux,还是在 VxWorks 中都是这些函数)
创建与打开
FILE* fopen(const char* path, const char* mode);
mode: 打开模式 r、rb 以只读方式打开
w、wb 以只写方式打开。如果文件不存在,则创建该文件,否则文件被截断
a、ab 以追加方式打开。如果文件不存在,则创建该文件
r+、r+b、rb+ 以读写方式打开
w+、w+b、wh+ 以读写方式打开。如果文件不存在时,创建新文件,否则文件被截断
a+、a+b、ab+ 以读和追加方式打开。如果文件不存在,则创建新文件
其中 b 用于区分二进制文件和文本文件,这一点在 DOS、Windows 系统中是有区分的,但
Linux 不区分二进制文件和文本文件。
读写:
C 库函数支持以字符、字符串等为单位,支持按照某种格式进行文件的读写,这一组函数为:
int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE *stream, const char *format, ...);
int fscanf (FILE *stream, const char *format, ...);
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
size_t fwrite (const void *ptr, size_t size, size_t n, FILE *stream);
fread()实现从流 stream 中读取加 n 个字段,每个字段为 size 字节,并将读取的字段放入 ptr
所指的字符数组中,返回实际已读取的字段数。在读取的字段数小于 num 时,可能是在函数调用
时出现错误,也可能是读到文件的结尾。所以要通过调用 feof()和 ferror()来判断。
write()实现从缓冲区 ptr 所指的数组中把 n 个字段写到流 stream 中,每个字段长为 size 个字
节,返回实际写入的字段数。
另外,C 库函数还提供了读写过程中的定位能力,这些函数包括:
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, const fpos_t *pos);
int fseek(FILE *stream, long offset, int whence);
关闭:
int fclose(FILE* stream);
范例:
#include <stdio.h>
int main()
{
FILE* fd;
char pr[15];
fd = fopen("hello.doc", "w+");
if (fd){
fputs("hello world", fd);
fcolse(fd);
}
fd = fopen("hello.doc", "r");
fgets(pr, 15, fd);
printf("%s\n", pr);
fclose(fd);
}
来自<<linux设备驱动开发详解>>
Smart210学习记录-------文件操作的更多相关文章
- HTML5学习之文件操作(九)
之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很进行跨平台的处理,另外就是让我们的web应用依赖了第三方的插件,而不是很独立 ...
- Smart210学习记录-----Linux i2c驱动
一:Linux i2c子系统简介: 1.Linux 的 I2C 体系结构分为 3 个组成部分: (1) I2C 核心. I2C 核心提供了 I2C 总线驱动和设备驱动的注册.注销方法,I2C 通信方法 ...
- python学习笔记:文件操作和集合(转)
转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...
- python学习总结---文件操作
# 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...
- Python学习之==>文件操作
1.打开文件的模式 r,只读模式(默认)[不可写:文件不存在,会报错] w,只写模式[不可读:不存在则创建:存在则删除内容] a,追加模式[不可读:不存在则创建:存在则追加内容] r+,读写模式[可读 ...
- erlang学习笔记(文件操作)
参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)
- Smart210学习记录-------Linux设备驱动结构
cdev结构体 1 struct cdev { 2 struct kobject kobj; /* 内嵌的 kobject 对象 */ 3 struct module *owner; /*所属模块*/ ...
- NodeJS学习之文件操作
NodeJS -- 文件操作 Buffer(数据块) JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作 ...
- python学习day8 文件操作(深度学习)
文件操作 (day7内容扩展) 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码')obj.write()obj.read()obj.close() 2 ...
随机推荐
- 教你如何做好SEO优化中的前端优化
网站的速度是很多人都面临的问题,其实许多网站,都没有特意的去优化加载速度,对于一个网站来说,加速不但提高了用户体验(如果一个网站在几秒内没 有打开,大多数用户选择的是关闭而非等待),而且对于SEO的流 ...
- 《Play for Java》学习笔记(七)数据类型解析——Body parser
一.什么是body parser? body parser(不知道具体如何翻译,~~~~(>_<)~~~~ )指一个HTTP请求 (如POST和PUT操作)所包含的文本内容(body),这 ...
- 【转】数据库范式(1NF 2NF 3NF BCNF)详解一
以下内容转自:http://jacki6.iteye.com/blog/774866 --------------------------------------------分割线---------- ...
- 使用@Controller注解为什么要配置<mvc:annotation-driven />
自己看了官方文档,也到网上查了下,目前理解如下: <mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和Annotat ...
- heartbeat安装
wget ftp://mirror.switch.ch/pool/1/mirror/scientificlinux/6rolling/i386/os/Packages/epel-release-6-5 ...
- 1800: [Ahoi2009]fly 飞行棋
#include<cstdio> #include<iostream> using namespace std; ],n,ans; int main() { scanf(&qu ...
- comboBox绑定数据库、模糊查询
实现: 一.绑定数据库 点击查询按钮,comboBox显示从数据库查到的某字段的一列数据 方法:在按钮的点击事件绑定数据库 private void button1_Click(object send ...
- Jquery判断div是否显示
$("#test").is(":hidden");//是否隐藏 $("#test").is(":visible");// ...
- superobject中 JavaToDelphiDateTime的使用
procedure TForm1.FormCreate(Sender: TObject); var n: TDateTime; i64: Int64; s: Integer; begin Memo1. ...
- ssl和https协议详解
转自:https://cuiyongxiu.com/201102/24157.html ssl协议的起源和历史我就不再多说了,就是那个Netscape 网景公司开发的,它的作用主要是提供了一种安全传输 ...