• 头文件说明

以下各函数均在<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集合

    存值 r1 = conn.sadd('urls', 'www.bing.com') r2 = conn.sadd('urls', 'www.baidu.com') 若要存入集合的值已存在(redis) ...

  2. Elastcisearch.Nest 7.x 系列`伪`官方翻译:通过 NEST 来快捷试用 Elasticsearch

    本系列已经已经全部完成,完整版可见:https://blog.zhuliang.ltd/categories/Elasticsearch/ 本系列博文是"伪"官方文档翻译(更加本土 ...

  3. java面试| 线程面试题集合

    集合的面试题就不罗列了,基本上在深入理解集合系列已覆盖 「 深入浅出 」java集合Collection和Map 「 深入浅出 」集合List 「 深入浅出 」集合Set 这里搜罗网上常用线程面试题, ...

  4. linux 网络有关的5个命令

    1:ifconfig 2:ifdown & ifup 3:route 4:traceroute 5:iptables 6

  5. 创建dynamics CRM client-side (十一) - 管理和关联所有的JS文件

    代码管理是一个无法避免的问题. 前面我也建议了大家每一个entity都应该拥有自身的js. 但是如果我们有一些global的function, 我们应该怎样去部署到每一个entity中呢? 我这里使用 ...

  6. redis端口6379的由来

    有一个技巧,Redis端口号6379,是手机键盘上的MERZ.

  7. 响应国家号召,在家撸码之React迁移记

    最近这段时间新型冠状病毒肆虐,上海确诊人数每天都在增加,人人提心吊胆,街上都没人了.为了响应国家号召,近期呆在家里撸码,着手将项目迁移到React中,项目比较朴素,是一张线索提交页面,包含表单.图片滚 ...

  8. Tomcat项目启动常见错误以及原因,持续更新.........

    一 Context initialization failed 错误截图: 原因: jdk版本与项目不对应,可重新设置项目jdk和ide编译的jdk即可

  9. npm、node版本升级与淘宝镜像

            npm --version  ==   npm -v       查看npm版本            node -v  查看node版本         升级npm版本   npm  ...

  10. qt QSplitter分割窗口

    #include <QApplication> #include <QFont> #include <QTextEdit> #include <QSplitt ...