有关O_APPEND标志和lseek()的使用
编程之路刚刚开始,错误难免,希望大家能够指出。
O_APPEND表示以每次写操作都写入文件的末尾。
lseek()可以调整文件读写位置。
<<Linux/UNIX系统编程手册>>上有这样一个问题:当在O_APPEND打开后,然后用 lseek移动文件开头,然后再用write写,这个时候,数据会显示在文件中的哪个位置?为什么?
先上代码:
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <stdio.h> int main(void)
{
int fd = open("test_open.txt",O_RDWR | O_APPEND);
if(fd < )
{
perror("open");
} int pos = lseek(fd,,SEEK_SET);
if(pos != )
{
printf("lseek error\n");
return -;
} int size =write(fd,"world",strlen("world"));
if(size != )
{
printf("write error\n");
} close(fd);
return ;
}
test_open.txt的内容随意,编译运行程序会发现数据显示在了文件最后,这个原因在APUE的3.8章节提到了:
对于普通文件,写操作从文件的当前偏移量处开始。如果在打开该文件时,指定了O_APPEND选项,则在每次写操作之前,将文件偏移量设置在文件的当前结尾处。在一次成功写入之后,该文件偏移量增加实际写的字节数。
其实就是在说O_APPEND会将lseek()的作用抵消掉。
有关O_APPEND标志和lseek()的使用的更多相关文章
- lseek函数
所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo.cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数.读写操作通常开始于 cfo,并 ...
- 函数名: lseek
函数名: lseek 功 能: 移动文件读/写指针 头文件:#include <sys/types.h> #include <unistd.h> 用 法: off_t lsee ...
- (46)LINUX应用编程和网络编程之一Linux应用编程框架
3.1.1.应用编程框架介绍 3.1.1.1.什么是应用编程 (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机.C高级.uboot和系统移植.linux应用编程和网络编程.驱动. ...
- linux中文件IO
一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- (八)open函数的flag详解
3.1.4.open函数的flag详解13.1.4.1.读写权限:O_RDONLY O_WRONLY O_RDWR(1)linux中文件有读写权限,我们在open打开文件时也可以附带一定的权限说明(譬 ...
- Linux中open函数以及退出进程的函数
open函数的flag详解1 读写权限:O_RDONLY O_WRONLY O_RDWR (1)linux中文件有读写权限,我们在open打开文件时也可以附带一定的权限说明 (譬如O_RDONLY就表 ...
- dup的使用
转自:http://www.cnblogs.com/GODYCA/archive/2013/01/05/2846197.html 下面是关于实现重定向的函数dup和dup2的解释: 系统调用dup和d ...
- linux中的dup()系统调用
参考1:http://www.blogjava.net/lihao336/archive/2011/12/13/366231.html 在linux纷繁复杂的内核代码中,sys_dup()的代码也许称 ...
随机推荐
- 学习Linux系统的方法有很多,适合自己的才是最好
综观现在互联网+的发展以及应用,作为一个从事IT行业的人员,应该懂得Linux占比多大份量,所以说,去掌握Linux是一种相当重要的谋生途径,当然,如果你对它产生情感那更好.这篇文章主要是本人结合自身 ...
- 高效方便的IO库: System.IO.Pipelines
我们在编写网络程序的时候,经常会进行如下操作: 申请一个缓冲区 从数据源中读入数据至缓冲区 解析缓冲区的数据 重复第2步 表面上看来这是一个很常规而简单的操作,但实际使用过程中往往存在如下痛点: 数据 ...
- unity中导入插件时报错处理办法
错误如下: Unhandled Exception: System.TypeLoadException: Could not load type 'System.ComponentModel.Init ...
- 愛與痛的邊緣--IPA--粤语
谭咏麟和王菲的版本各有味道.
- python获取代理IP
利用requests库获取代理,用Beautiful库解析网页筛选ip # -*- coding: utf- -*- import requests from bs4 import Beautiful ...
- 安装gcc
yum -y install gcc yum -y install gcc-c++ yum install make -- 或者 yum groupinstall "Developmen ...
- activiti 插件安装,以及初始化配置
1.安装插件 2.添加pom 3.配置activiti.cfg.xml 4.绘制业务流程图 MyProcess.bpmn 5.加载activiti数据表 6.创建流程 1.安装eclipse acti ...
- JavaWeb:c3p0配置问题-----java.sql.SQLException: Connections could not be acquired from the underlying database!
错误原因 c3p0的配置错误 错误显示 -classpath "D:\Program\Software\IntelliJIDEA\IntelliJ IDEA 2018.2.5\lib\ide ...
- CentOS 7部署Java+Mysql步骤
1.工具 putty0.7:用于远程控制服务器 winSCP5.13: ftp工具,用于向远程服务器传送文件 2.安装jdk: yum -y install java-1.8.0-openjdk ja ...
- Python 类变量
class Person: country = "大清" def __init__(self, name, gender): self.name = name self.gende ...