系统调用方式文件编程,王明学learn
系统调用方式文件编程
一、文件描述符
在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配,我们称之为:文件描述符。
二、函数学习
2.1打开文件 open
2.1.2 函数原形
1).int open(const char *pathname,int flags);
2).int open(const char *pathname,int flags,mode_t mode);
2.1.3 函数功能
打开或者创建一个文件
2.1.4 所属头文件
<sys/types.h> <sys/stat.h> <fcntl.h>
2.1.5 返回值
成功:文件文件描述符 失败:-1
2.1.6 参数说明
pathname:要打开的文件名(包含路径)
flags:文件打开的标志(参数含义如表格)

O_APPEND:已追加的方式打开文件
O_CREAT:如果要打开的文件不存在,创建该文件
mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件访问权限(标志含义如下)

2.2 创建文件 creat
2.2.1 函数原形
int creat(const char *pathname,mode_t mode);
2.2.2 函数功能
创建一个文件并且以只写方式打开
2.2.3 所属头文件
<sys/types.h> <sys/stat.h> <fcntl.h>
2.2.4 返回值
成功:文件描述符 失败:-1
2.2.5 参数说明
Pathname:创建的文件名(含路径)
mode:创建的文件的读写权限
2.3读文件read
2.3.1 函数原形
ssize_t (int fd,void *buf,size_t count);
2.3.2函数功能
从一个打开的文件中读取数据
2.3.3 所属头文件
<unistd.h>
2.3.4 返回值
成功:返回读取的字节数
失败:-1
2.3.5 参数说明
fd:要读取数据的文件描述符
count:希望读取的字节数
buf:读取到的数据存放到buf指向的空间
2.4 写文件 write
2.4.1.函数原形
ssize_t write(int fd,void *buf,size_t count);
2.4.2 函数功能
向一个打开的文件写入数据
2.4.3所属头文件
<unistd.h>
2.4.4返回值
成功:返回写入到文件的字节数
失败:-1
2.4.5参数说明
fd:要写入的文件描述符
buf:从buf中取数据
count:要写入的字节数
2.5定位文件lseek
2.5.1函数原形
off_t lseek(int fd,off_t offset,int whence);
2.5.2函数功能
lseek()将文件读写指针相对 whence 移动 offset 个字节
2.5.3所属头文件
<unistd.h> <sys/types.h>
2.5.4返回值
成功:返回距离文件头的偏移量
失败:-1
2.5.5参数说明
fd:要调整的文件
offset:偏移的地址数目
offset 取负值,例如下述调用将文件指针相对当前位置向前移动 5 个字节。
lseek(fd, -5, SEEK_CUR);
由于 l seek 函数的返回值为文件指针相对于文件头的位置, 因此下列调用的返回值就是文件的长度:
lseek(fd, 0, SEEK_END);
whence:表示的是文件指针从什么地址移动
SEEK_SET:相对文件开头。
SEEK_CUR:相对文件读写指针的当前位置。
SEEK_END:相对文件末尾。
2.6复制文件描述符dup
2.6.1函数原形
int dup(int oldfd);
2.6.2 函数功能
复制一个文件描述符
2.6.3 所属头文件
<unistd.h>
2.6.4返回值
成功:返回新的文件描述符
失败:-1
2.6.5参数说明
oldfd:待复制的老文件描述符
实例:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#define LENGTH 100
main()
{
int fd, len;
char str[LENGTH]; fd = open("hello.txt",O_CREAT |O_RDWR,S_IRUSR |S_IWUSR); /*
12 创建并打开文件 */
if (fd)
{
write(fd, "Hello World", strlen("Hello World")); /*写入字符串 */ close(fd);
} fd = open("hello.txt",O_RDWR);
len = read(fd, str, LENGTH); /* 读取文件内容 */
str[len] = '\0';
printf("%s\n", str);
close(fd);
}
系统调用方式文件编程,王明学learn的更多相关文章
- 信号通讯编程,王明学learn
信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...
- 时间编程,王明学learn
时间编程 一.时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT) Calend ...
- 系统调用方式文件编程-open
通过Linux系统调用函数编写应用程序,该应用程序实现文件的复制功能 文件描述符--在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配. 1.打开文件--open 头文件:#inc ...
- 库函数系统调用文件方式,王明学learn
库函数系统调用文件方式 基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows.Linux还是其他的操作系统中,都是使用这些函数.使用库函数进行程序设计可提高程序的可移植性. 对于 ...
- linux内核的组成,王明学learn
linux内核的组成 一.linux内核源代码目录结构 arch: 包含和硬件体系结构相关的代码, 每种平台占一个相应的目录, 如 i386.ARM.PowerPC.MIPS 等. block:块设备 ...
- linux设备驱动概述,王明学learn
linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设 ...
- 静态/动态函数库设计,王明学learn
静态/动态函数库设计 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别: 一.函数库分类 函数库按照链接方式可分为: 1.静态链接库 对函数库的链接是放在编译时期(com ...
- ARM伪指令,王明学learn
ARM伪指令 在ARM汇编语言程序中里,有一些特殊指令助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作.伪指令在元程序中的作用是为完成汇编 ...
- 共享内存同行,王明学learn
共享内存同行 一.共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式. 二.函数学习 这里主要有创建共享内存.映射共享内存.分离共享内 ...
随机推荐
- Postman
Postman功能(https://www.getpostman.com/features) 主要用于模拟网络请求包 快速创建请求 回放.管理请求 快速设置网络代理 安装 下载地址:https://w ...
- keystone v3 相关介绍
1) 涉及到如下几个概念:User.Tenant.Role.Token.http://www.ibm.com/developerworks/cn/cloud/library/1506_yuwz_key ...
- 7 天玩转 ASP.NET MVC — 第 3 天
目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 我们假定你在开始学习时已经阅读了前两天的学习内容.在第 2 天我们完成了关于显示 Employee ...
- 基础知识《八》---Java反射机制
1.反射可以做什么 2.反射相关的API 3.获取Class运行时类的实例的三种方法: 1)通过运行时类本身的.class属性***** Class clazz= Person.class; 2)通过 ...
- Group Anagrams
Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...
- 转:C++编程隐蔽错误:error C2533: 构造函数不能有返回类型
C++编程隐蔽错误:error C2533: 构造函数不能有返回类型 今天在编写类的时候,出现的错误. 提示一个类的构造函数不能够有返回类型.在cpp文件里,该构造函数定义处并没有返回类型.在头文件里 ...
- iOS coredata 数据库升级 时报Can't find model for source store
在coredata 数据库结构被更改后,没根据要求立即建立新version,而是在原version上进行了小修改,之后才想起来建立新版本.并通过以下代码合并数据库, NSError *error = ...
- Zlib 在windows上的编译
1.下载http://www.zlib.net 下载,最新版本1.2.8 2.解压后,实际已提供了在vc下编译的工程,目录为:zlib-1.2.8\contrib\vstudio. 其中的zlibst ...
- 24. javacript高级程序设计-最佳实践
1. 最佳实践 l 来自其他语言的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定 l javascript应该定义行为,html ...
- nyoj814_又见拦截导弹_DP
又见拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦 ...