• 头文件说明

以下各函数均在<unistd.h>中

flags的各个值定义于<fcntl.h>中

BUFSIZ定义于<stdlib.h>中 (似乎<stdio.h>中也有)
  • 打开或创建文件
int open(char *filename, int flags, int perms);
int creat(char *name, int perms);
flags 在linux中定义在 <fcntl.h> 中
主要值有三个 O_RDONLY  O_WRONLY  O_RDWR
perms即unix文件权限,用三位八进制数表示,比如0666 0755
对于open,perms填0就可以读取(就目前所知)

open打开一个不存在的文件会出错

而creat创建一个不存在的文件不会出错
open和creat如果成功的打开文件会返回 文件描述符,否则返回 -1

 操作系统默认的三个文件操作符 0 1 2

分别代表stdin stdout stderr

  •  关闭文件与删除文件

int close(int fd);

用于断开与文件的链接 释放文件描述符

 int unlink(char *filename);

用于删除文件

close和unlink若执行成功则返回 0, 否则返回 -1

  •  读取文件与写入文件

 int read(int fd, char *buf, int n );

int write(int fd, char *buf, int n);
buf是缓冲区
可以是一个数组名, 也可以时char指针, 还可以是 &c (即一个char变量的地址, 不过此时每次只能传输一位)
n为每次要传输的字节数(并不一定为真实传输的字节数)
n如果很小,则需要频繁读取,会大大降低操作效率
因此n大小需要合适,(BUFSIZ 定义于stdlib.h文件中,对于所用操作系统是一个比较合适的值)
read和write的返回值均为真实传输的字节数
read和write都会在上次文件操作之后的位置开始操作
若需要在文件中移动,需要用下面的lseek函数
  •  游标移动
int lseek(int fd, long offset, int origion);
lseek可以在文件中随意移动而不会修改文件内容
其中offset是相对于origin移动的距离
offset是可以为负值的 比如-10L (注意offset为long 因此需加上L或l)
origin可以为 0 1 2
分别代表文件头 当前位置 文件尾

C语言低级I/O(UNIX接口)的更多相关文章

  1. 生成跨语言的类型声明和接口绑定的工具(Djinni )

    Djinni 是一个用来生成跨语言的类型声明和接口绑定的工具,主要用于 C++ 和 Java 以及 Objective-C 间的互通. 示例接口定义文件: # Multi-line comments ...

  2. Go 语言中的方法,接口和嵌入类型

    https://studygolang.com/articles/1113 概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 编译器会 ...

  3. Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】

    原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...

  4. Go语言系列(六)- 接口和反射

    接口 1. 定义: Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. type example interface{ Method1(参数列表) 返 ...

  5. go语言之进阶篇error接口应用

    1.error接口应用 示例: package main import "fmt" import "errors" func MyDiv(a, b int) ( ...

  6. go语言之进阶篇error接口的使用

    1.error接口的使用 示例: package main import "fmt" import "errors" func main() { //var e ...

  7. R语言低级绘图函数-symbols

    严格意义上将symbols 并不能算是一个低级的绘图函数,因为它不仅可以在一幅已经存在的图标上添加元素,还可以创建一张新的图表 鉴于它绘图时的灵活性,我把它归入到低级绘图函数中 symbols 可以创 ...

  8. 【原创】go语言学习(十七)接口应用实战--日志库

    目前 日志库需求分析 日志库接口设计 文件日志库开发 Console日志开发 日志使用以及测试 日志库需求分析 1.日志库需求分析 A. 程序运行是个黑盒B. 而日志是程序运行的外在表现C. 通过日志 ...

  9. 吴裕雄--天生自然C++语言学习笔记:C++ 接口(抽象类)

    接口描述了类的行为和功能,而不需要完成类的特定实现. C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念. 如果类中至少有一个函数被声明为纯虚 ...

随机推荐

  1. Redis(五):hash/hset/hget 命令源码解析

    Redis作为nosql数据库,kv string型数据的支持是最基础的,但是如果仅有kv的操作,也不至于有redis的成功.(memcache就是个例子) Redis除了string, 还有hash ...

  2. kafka概念扫盲

    一.kafka概述 1.1.定义 Kakfa是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域 1.2.消息队列 1.2.1.传统的消息队列&am ...

  3. Object类、常用API_2

    主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 学习目标 -[ ] 能够说出Object类的特点 -[ ] 能够 ...

  4. Java多态之Father f=new Son();

    成员变量静态方法看左边,非静态方法编译看左边,运行看右边. 左边Father f其实是定义了一个Father类的对象,而右边new Son()可以只理解为是一个重写了Father类方法的对象. 因此, ...

  5. 简述java的ArrayList

    java的ArrayList 基础知识: ArrayList集合长度可以发生改变 泛型 自动装箱和自动拆箱 部分常用的接口方法 boolean add(E obj) E add(int index,E ...

  6. Java练习题1

    题目1: 编程实现,现在有如下的一个数组: int oldArr[] = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}; 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的 ...

  7. MGR监控报警

    一.报警思路 m.conf文件记录配置信息,只需要修改这个文件的内容即可(需要将mysql_stat.sh里面的信息写到这里,进行中) mysql_stat.sh文件作为MGR状态监测脚本,加入定时任 ...

  8. Mybatis基础(二)

    Mybatis连接池 Mybatis连接池提供了三种配置方式,配置的位置在SqlMapConfig.xml的dataSource标签中,其type属性就是配置连接池的种类.type的可取值 1.POO ...

  9. FFMPEG学习----使用SDL构建视频播放器

    #include <stdio.h> #include <string.h> extern "C" { #include "libavcodec/ ...

  10. 深入理解JVM-类加载及类加载器

    深入理解JVM 2020年02月06日22:43:09 - 记录学习过程 终于开始了.在学习这个之前,看了zhanglong老师的 java 8 和springboot 迫不及待了.先开始吧. 写在前 ...