《UNIX环境高级编程》笔记--read函数,write函数,lseek函数
1.read函数
#include <unistd.h>
ssize_t read(int filedes, void* buff, size_t nbytes);
成功则返回实际读取的byte数,如果已经达到文件结尾则返回0,出错则返回-1.
2.write函数
#include <unistd.h>
ssize_t write(int filedes, void* buff, size_t nbytes);
成功则返回实际写入的byte数,出错则返回-1.
3.lseek函数
每个打开的文件都有一个关联的“当前偏移量”,用于记录从文件到当前当前位置的偏移字节数,lseek函数是设置这个当前偏移量
#include <unistd.h>
off_t lseek(int filedes, off_t offset, int whence);
成功则返回新的文件偏移量,失败则返回-1.
off_t currpos;
currpos = lseek(fd, 0, SEEK_CUR);
2.实践
#include <fcntl.h>
#include <stdio.h>int main(void){int fd,byteNum,result;char wbuf[10] = "123456789";char rbuf[10];if((fd = open("./a.txt", O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR|S_IXUSR))<0){perror("open");return -1;}if((byteNum = write(fd, wbuf, 10))<0){perror("write");return -1;}if((result = lseek(fd, 4, SEEK_SET))<0){perror("lseek");return -1;}if((byteNum = read(fd, rbuf, 10)) < 0){perror("read");return -1;}printf("read content:%s\n",rbuf);close(fd);return 0;
}
运行结果:
#include <fcntl.h>
#include <stdio.h>int main(void){int fd,byteNum,result;char wbuf[10] = "123456789";char rbuf[10];if((fd = open("./a.txt", O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR|S_IXUSR))<0){perror("open");return -1;}if((byteNum = write(fd, wbuf, 10))<0){perror("write");return -1;}if((result = lseek(fd, -1, SEEK_SET))<0){perror("lseek");return -1;}if((byteNum = read(fd, rbuf, 10)) < 0){perror("read");return -1;}printf("read content:%s\n",rbuf);close(fd);return 0;
}
运行结果:
#include <fcntl.h>
#include <stdio.h>int main(void){int fd,byteNum,result;char wbuf[10] = "123456789";char rbuf[10];if((fd = open("./a.txt", O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR|S_IXUSR))<0){perror("open");return -1;}if((byteNum = write(fd, wbuf, 10))<0){perror("write");return -1;}if((result = lseek(fd, -4, SEEK_CUR))<0){perror("lseek");return -1;}if((byteNum = read(fd, rbuf, 10)) < 0){perror("read");return -1;}printf("read content:%s\n",rbuf);close(fd);return 0;
}
运行结果:
#include <fcntl.h>
#include <stdio.h>int main(void){int fd,byteNum,result;char wbuf[10] = "123456789";char rbuf[10];if((fd = open("./a.txt", O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR))<0){perror("open");return -1;}if((byteNum = write(fd, wbuf, 10))<0){perror("write");return -1;}if((result = lseek(fd, 40960, SEEK_END))<0){perror("lseek");return -1;}if((byteNum = write(fd, wbuf, 10)) < 0){perror("write");return -1;}close(fd);return 0;
}
运行结果:
0000000 1 2 3 4 5 6 7 8 9 \0 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0120000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 1 2 3 4 5 6
0120020 7 8 9 \0
0120024
《UNIX环境高级编程》笔记--read函数,write函数,lseek函数相关推荐
- Unix环境高级编程 笔记
Unix环境高级编程(第二版)学习笔记 这是一次较长时间的整理,然而跳跃了一些章节和很多知识点,仍然是很不完善很不全面的. 前言 操作系统某些问题 严格意义上,可将操作系统定义为一种软件,它控制计算机 ...
- UNIX环境高级编程笔记之文件I/O
一.总结 在写之前,先唠几句,<UNIX环境高级编程>,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是"哇"这种很吃惊的表情.其实大概三年前,那会 ...
- UNIX环境高级编程笔记
1.setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, len); SO_REUSEADDR套接口选项允许为以下四个不同的目的提供服务: ...
- UNIX环境高级编程笔记(2)- STDIN_FILENO、STDOUT_FILENO和stdin、stdout的区别
目录 前言 一.STDIN_FILENO.STDOUT_FILENO介绍 二.stdin.stdout介绍 三.代码例程 1.文件描述符的使用 2.流的使用 3.代码标记 总结 前言 本章主要通过UN ...
- UNIX环境高级编程笔记(14)- 函数sigsuspend 实现父进程子进程同步
前言 本章主要介绍sigsuspend函数以及实现父进程子进程通过信号的同步. 一.函数sigsuspend #include<signal.h> int sigsuspend(const ...
- 函数sleep、nanosleep和clock_nanosleep(UNIX环境高级编程笔记)
#include <unistd.h> unsigned int sleep(unsigned int seconds); 返回值:0或未休眠完的秒数 此函 ...
- UNIX环境高级编程笔记之进程控制
本章重点介绍了进程控制的几个函数:fork.exec族._exit.wait和waitpid等,主要需要掌握的是父进程和子进程之间的运行机制,怎么处理进程的正常和异常终止.以及怎么让进程执行不同的程序 ...
- Unix环境高级编程笔记:12、高级IO
2019独角兽企业重金招聘Python工程师标准>>> 1.非阻塞IO 系统调用分成"低速"系统调用和其他系统调用.低速系统调用是可能会使进程永远阻塞的一类系统调 ...
- 文件io(二)--unix环境高级编程笔记
在linux中,打开的文件组织结构如下: 与打开的文件相关的有三个数据结构,就是上图中的三部分. 在linux中,有一个进程表,每一个进程在进程表中有一个表项.每一个进程表项中都维护着一张打开文件的描 ...
- 《Unix环境高级编程》学习笔记:从点到面
以前在课堂上学习过<Unix初级教程(第四版)>,对于Unix有了一点了解.由于以后使用的需要,要对它进行比较深入的学习,为此需要阅读不少的书籍,这本<Unix环境高级编程>便 ...
最新文章
- PHP遍历用blade标签表示,php-Laravel Blade {{$variable或’Default Text’}}无法使用网址
- Gut:华中科大蔺蓉组开发简单便捷无创肠道生物信息获取方法
- android开发小技巧:实现listview异步加载图片
- python列表切片口诀-Python-100例(7-8) 复制列表 打印乘法口诀
- VM与VPC共存(续)
- Java技术:项目构建工具Maven最佳替代者gradle介绍
- 【渝粤教育】电大中专电大中专沟通技巧考试考核试题 (2)作业 题库
- ROS安装过程和配置过程(可能出现的问题及解决方法)
- 宜家邮件系统正遭网络攻击
- 更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误...
- HG8240电信光猫禁用TR069之修改配置法
- 2013年最具有技术影响力原创图书评选
- CorelDRAW2023安装下载教程精简版矢量绘图软件
- 读周爱民《javascript语言精髓与编程实践》有感
- 鸿蒙os适配平板,华为新平板搭载高通4G芯片,鸿蒙OS已适配完成,友商随时可用...
- STM32中断优先级分组概念
- python 百度地图api
- 程序员的日常:当一名程序员到底有多难?
- 计算机组成原理-算术逻辑单元(ALU)
- idea 在创建maven 时出现报错org.codehaus.plexus.component.repository.exception.ComponentLookupException:
热门文章
- 肖申克的救赎,阅后瞎想...(zz)写的不错
- 实验三 类和对象
- SpringBoot系列六:SpringBoot整合Tomcat
- 图片上传至服务器实现压缩
- 定时任务执行利器Timer和ScheduledThreadPoolExecutor使用
- Jsp语法、指令及动作元素
- php-5.6配置,PHP5.6+apache2.4环境配置
- java 类复制构造方法_java面向对象入门(3)-java构造方法
- Android编程之DialogFragment源码详解(二)
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音