笔记八:linux系统编程之IO
inux高级编程:涉及内核为应用层提供接口函数;
open(char *, flag, mode)在fcntl.h文件中声明。函数的作用:创建或打开某个文件,参数:最多有三个参数;
第一个参数,char * 包含有文件名和路径
第二个参数:flag 打开文件的方式
第三个参数:mode 创建文件的权限。
flag内容如下:
|
flag
|
功能
|
|
O_RDONLY
|
只读
|
|
O_WRONLY
|
只写
|
|
O_RDWR
|
读写
|
|
O_CREAT
|
创建一个文件
|
|
O_EXCL
|
如果使用
O_CREAT 时文件存在,则可返回错误消息。这一 参数可测试文件是否存在。 |
|
O_TRUNC
|
打开文件(会把已经存在的内容给删除)。
|
|
O_APPEND
|
追加方式打开文件(不会把已经存在的内容给删除)。
|
内核的一个重要功能是文件管理,系统有非常多的文件,内核怎样认识每一个文件呢?内核采用ID号的方式标识这些文件,inode 号,node号表示不同的文件,比如ls –lai i,只要文件不一样,inode号就不一样。
0
开始累加,程序进行时(进程),内核会自动打开
3
个文件描述符,
0
,
1
,
2
,分别对应,标准输入、输出和出错,这样在程序中,每打开一个文件,文件描述符值从
3
开始累加。
0:键盘输入
write(int fd, void *buf, size_t count ):
第一个参数:向哪一个文件中去写;第二个参数:向这个文件中写什么内容;第三个参数:向这个文件中写多少个。函数的返回值:是实际写的字节数。
read(int fd, void *buf, size_t count)
第一个参数:从哪一个文件中去读;第二个参数:读到什么地方去;第三个参数:读多少个。函数的返回值:是实际读的字节数。
- lseek(int fd, off_t offset, int whence),该函数的头文件: sys/types.h unistd.h
功能:调整读写的位置指针;
第一个参数:要调整的文件的文件描述符;
第二个参数:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移);
第三个参数:当前位置的基点,有三个标志,
SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小;
SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量。
SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小。函
数的
返回值:成功:文件当前的位置,出错:-1。
close(fd),
调用close()函数可以关闭一个打开的文件。
调用成功返回0,出错返回-1,并设置errno;
注:当一个进程终止时,该进程打开的所有文件都由内核自动关闭;
#include "unistd.h"
#include "fcntl.h"
#include "stdio.h"
int main()
{
int fd;
int ret,readret;
char buf[]="hello linux\n";
char readbuf[128]={0};
fd=open("./a.c",O_RDWR | O_CREAT | O_EXCL,0777);
if(fd < 0)
{
printf("creat file a.c failure\n");
return -1;
}
printf("creat file a.c sucess,fd=%d\n",fd);
ret=write(fd,buf,8);
printf("write ret=%d\n",ret);
// change read_write_pointer
lseek(fd,-4,SEEK_END);
readret=read(fd,readbuf,128);
printf("readbuf=%s,readret=%d\n",readbuf,readret);
close(fd);
return 0;
}笔记八:linux系统编程之IO的更多相关文章
- Linux系统编程之IO_缓冲和非缓冲
下面是一段类似日志记录的代码,已获取通讯的报文内容和当时的环境参数内容,就是创建一个文件,使用标准IO的fopen.fprintf进行输出记录.但是在调试中,刚开始我就傻眼了,文件创建成功了,但是实时 ...
- linux系统编程之lseek帮助文档
通过man 2 lseek可以查看linux中的系统函数lseek函数的帮助文档,为了更好的学习,我把这些重要内容翻译过来 NAME lseek - reposition read/write fil ...
- linux系统编程之I/O内核数据结构
文件在内核中是用三种数据结构进行表示的 (1)文件描述符表:文件描述符表是一个结构体数组,数组的下标就是open函数返回的文件描述符. 文件描述符表的每一个记录有两个字段 *文件描述符标志 * 文 ...
- linux网络编程之IO函数
Linux操作系统中的IO函数主要有read(),write(),recv(),send(),recvmsg(),sendmsg(),readv(),writev(). 接收数据的recv()函数 # ...
- linux网络编程之IO模型
本文转自作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓 ...
- Java IO学习笔记八:Netty入门
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...
- kali Linux系列教程之BeFF安装与集成Metasploit
kali Linux系列教程之BeFF安装与集成Metasploit 文/玄魂 kali Linux系列教程之BeFF安装与集成Metasploit 1.1 apt-get安装方式 1.2 启动 1. ...
- 【hadoop代码笔记】Mapreduce shuffle过程之Map输出过程
一.概要描述 shuffle是MapReduce的一个核心过程,因此没有在前面的MapReduce作业提交的过程中描述,而是单独拿出来比较详细的描述. 根据官方的流程图示如下: 本篇文章中只是想尝试从 ...
- 如何提高Linux下块设备IO的整体性能?
编辑手记:本文主要讲解Linux IO调度层的三种模式:cfp.deadline和noop,并给出各自的优化和适用场景建议. 作者简介: 邹立巍 Linux系统技术专家.目前在腾讯SNG社交网络运营部 ...
- Linux 网络编程(IO模型)
针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下 ...
随机推荐
- Go_day08
Go的Io流 获取文件信息 //获取文件 fileinfo, err := os.Stat("./aa.txt")//相对绝对路径都可以 if err != nil { fmt.P ...
- React16下报错引发整个页面crash的解决方法
如果报错没有没有被catch,将会引起整个React组件树的unmounting 解决方法:在生命周期中增加componentDidCatch https://reactjs.org/blog/201 ...
- vue-print-nb的应用
1.cnpm i vue-print-nb 2.触发事件:v-print="printObj" 3.触发的是个对象: printObj:{ id: ...
- 【转载】JMeter如何确定ramp-up时间
转载自:https://blog.csdn.net/wangyanhong123456/article/details/123046451 线程组:用于模拟. 线程属性包含了:线程数.Ramp-Up时 ...
- ServletConfig接口介绍
前言: Servlet 容器初始化 Servlet 时,会为这个 Servlet 创建一个 ServletConfig 对象,并将 ServletConfig 对象作为参数传递给 Servlet .通 ...
- TypeScript 学习笔记 — 类型兼容 (十)
目录 一.基本数据类型的兼容性 二.接口兼容性 三.函数的兼容性 四.类的兼容性 类的私有成员和受保护成员 五.泛型的兼容性 六.枚举的兼容性 标称类型简短介绍 TS 是结构类型系统(structur ...
- P6666 [清华集训2016] 数据交互 题解
## P6666 [清华集训2016] 数据交互 题解 ### 简要题意: n个点的树,m次操作,分别为添加一条路径$(u_i,v_i,w_i)$,和撤消一条路径,每一次操作后求出一条路径使得与这条路 ...
- 使用dataX收获的教训
首先是安装dataX,安装非常简单,只需下载对应的压缩包即可. 下载地址:https://github.com/alibaba/DataX 首先我出现的第一个错误:命令提示符界面出现出现乱码. 解决方 ...
- OpenWRT实现NAT64/DNS64
OpenWRT实现NAT64/DNS64 连接到核心路由器 # 连接到核心路由器 [C:\~]$ ssh root@10.0.0.1 Connecting to 10.0.0.1:22... Conn ...
- python入门教程之一 什么是python
python简介 1 什么是python Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页 ...