一.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学习记录-------文件操作的更多相关文章

  1. HTML5学习之文件操作(九)

    之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很进行跨平台的处理,另外就是让我们的web应用依赖了第三方的插件,而不是很独立 ...

  2. Smart210学习记录-----Linux i2c驱动

    一:Linux i2c子系统简介: 1.Linux 的 I2C 体系结构分为 3 个组成部分: (1) I2C 核心. I2C 核心提供了 I2C 总线驱动和设备驱动的注册.注销方法,I2C 通信方法 ...

  3. python学习笔记:文件操作和集合(转)

    转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...

  4. python学习总结---文件操作

    # 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...

  5. Python学习之==>文件操作

    1.打开文件的模式 r,只读模式(默认)[不可写:文件不存在,会报错] w,只写模式[不可读:不存在则创建:存在则删除内容] a,追加模式[不可读:不存在则创建:存在则追加内容] r+,读写模式[可读 ...

  6. erlang学习笔记(文件操作)

    参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)

  7. Smart210学习记录-------Linux设备驱动结构

    cdev结构体 1 struct cdev { 2 struct kobject kobj; /* 内嵌的 kobject 对象 */ 3 struct module *owner; /*所属模块*/ ...

  8. NodeJS学习之文件操作

    NodeJS -- 文件操作 Buffer(数据块) JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作 ...

  9. python学习day8 文件操作(深度学习)

    文件操作 (day7内容扩展) 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码')obj.write()obj.read()obj.close() 2 ...

随机推荐

  1. DataOdinalRegression

    clear name={'SCV1V1','SVC1VA','SVR','CSSVC','SVMOP','NNOP','ELMOP','GPOR','KDLOR','POM',... 'NNPOM', ...

  2. SQL Server数据库(作业讲解和复习)

    --第一题 查询Student表中的所有记录的Sname.Ssex和Class列.select Sname,Ssex,Class from student --第二题 查询教师所有的单位即不重复的De ...

  3. Ubuntu 设置su密码

    如果之前安装时没有设置root密码,可以如下设置: 命令窗口中输入:sudo passwd [sudo] password for 用户名:  这里输入你sudo 的密码输入新的 UNIX 密码: 重 ...

  4. quartz Web项目基础最简单配置

    web方面的quartz 配置资料,从网上搜索出来的很难找到完整可用的代码样例.自己上传一个. IDE:Intellij tomcat jdk1.7 quartz 2.1.5 这里下载: http:/ ...

  5. Octopus系列之开发过程各个技术点

    自定义了页面周期 使用唯一的一个VelocityEngine全局的静态实例,优化了小泥鳅blog中每次请求都要创建VelocityEngine实例对象,减少了对象的开销 通过UA判断请求来自的设备,从 ...

  6. JS桌面应用

    一.图片预加载 var oImg = new Image(); oImg.onload=function(){ //alert('success'); } oImg.onerror=function( ...

  7. iOS产品开发流程

    iOS产品开发流程 a.产品经理做需求调研,确定产品需求,编写需求文档 b.产品人员完成产品原型 c.产品经理召开会议(产品,UI,UE,开发,测试,服务器) d.设计人员根据原型设计出一系列UI界面 ...

  8. jsp作用域

    1.page: JSP页面内所有实例的默认作用域都是page,仅限于本页面使用 2.request: 同一次请求所涉及的服务器资源(可能是页面.Servlet等),例如,程序使用<jsp:for ...

  9. cssTex

    var head= document.getElementById("head");head.style.cssText="width:200px;height:70px ...

  10. 神奇的Noip模拟试题一试 2 排队

    2 排队 (lineup.pas/.c/.cpp) [问题描述] 小sin所在的班有n名同学,正准备排成一列纵队,但他们不想按身高从矮到高排,那样太单调,太没个性.他们希望恰好有k对同学是高的在前,矮 ...