先来介绍pread函数

[root@bogon mycode]# cat test.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
char buf[20];
void testpread(int fd1)
{
int i;
printf("use pread\n");
pread(fd1,buf,3,2);//起始位置为2,偏移量为3,总的意思就是从fd1文件描述符中的起始位置为2到偏移量为3的内容读取到buf中,注意执行后文件偏移量没有变动,所以下面的第一条read语句,其实位置还是开头那里
for(i=0;i<3;i++)
printf("%c",buf[i]);
read(fd1,buf,3);
for(i=0;i<3;i++)
printf("%c",buf[i]);
printf("\nuse read\n");
read(fd1,buf,3);//上一个read使得文件偏移量移动了3个位置,所以打印的是456
for(i=0;i<3;i++)
printf("%c",buf[i]);
}
int main()
{
int fd,fd1,i;
fd1=open("linux.txt",O_RDWR);//自己再加上测试是否打开成功几条语句吧,我懒得加了
testpread(fd1);
close(fd1);
return 0;
}
[root@bogon mycode]# cat linux.txt
123456
[root@bogon mycode]# gcc test.c
[root@bogon mycode]# ./a.out
use pread
345123
use read
456[root@bogon mycode]#

接着pwrite

[root@bogon mycode]# cat linux.txt
123456
[root@bogon mycode]# cat test.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
char buf[20];
char name[]="linuxfiletest";
void testpwrite(int fd1)
{
int i;
pwrite(fd1,name,5,0);//从name中取5个字节从fd1的起始0位置开始写入
read(fd1,buf,5);//pwrite不会改变文件偏移量,所以这里还是从头开始打印的
for(i=0;i<5;i++)
printf("%c",buf[i]);
printf("\n");
}
int main()
{
int fd,fd1,i;
fd1=open("linux.txt",O_RDWR);
testpwrite(fd1);
close(fd1);
return 0;
}
[root@bogon mycode]# gcc test.c
[root@bogon mycode]# ./a.out
linux
[root@bogon mycode]# cat linux.txt
linux6//文件内容被修改了
[root@bogon mycode]#

pread和pwrite函数的更多相关文章

  1. Unix系统编程()在文件特定偏移量处的IO:pread和pwrite

    首先我想问的是这两个p代表的是什么? 系统调用pread和pwrite完成与read和write相类似的工作,只是前两者会在offset参数所指定的位置进行文件IO操作,而非始于文件的当前偏移量处,并 ...

  2. read pread write pwrite open

    http://stackoverflow.com/questions/7592822/what-are-the-advantages-of-pwrite-and-pread-over-fwrite-a ...

  3. Linux文件I/O学习

    Linux内核的VFS子系统: 文件描述符     对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符.当读 ...

  4. 线程控制之线程和I/O

    http://www.cnblogs.com/nufangrensheng/p/3498723.html中介绍了pread和pwrite函数,这些函数在多线程环境下是非常有帮助的,因为进程中的所有线程 ...

  5. 文件I/O(不带缓冲)之原子操作

    一.添写至一个文件 考虑一个进程,它要将数据添加到一个文件尾端.早期的UNIX系统并不支持open的O_APPEND选项,所以程序被编写成下列形式: ) < ) /* position to E ...

  6. 【UNIX环境高级编程】文件I/O

    [UNIX环境高级编程]文件I/O大多数文件I/O只需要5个函数: open.read.write.lseek以及close 不带缓冲的I/O: 每个read和write都调用内核中的一个系统调用 1 ...

  7. 文件I/O(2)

    文件I/O(2) 文件共享 内核使用三种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对还有一个进程可能产生的影响.如图1所看到的. 1)  每一个进程在进程表中都有一个记录项.记 ...

  8. UNIX高级环境编程(2)FIle I/O - 原子操作、共享文件描述符和I/O控制函数

    引言: 本篇通过对open函数的讨论,引入原子操作,多进程通信(共享文件描述符)和内核相关的数据结构. 还会讨论集中常见的文件IO控制函数,包括: dup和dup2 sync,fsync和fdatas ...

  9. 第三章 文件 I/O

    3.1 引言 先说明可用的文件 I/O 函数:open.read.write.close,然后说明不同缓冲区长度对read和write函数的影响. 本章所说的函数经常被称为不带缓冲的 I/O (unb ...

随机推荐

  1. java Calendar类得到每个月的周末是几号的工具方法

    public static List getWeekendInMonth(int year, int month) { List list = new ArrayList(); Calendar ca ...

  2. vue-router-4-编程式导航

    想要导航到不同的 URL,用 router.push 方法,会向 history 栈添加一个新的记录 <router-link> <==>router.push // 字符串 ...

  3. Alpha 冲刺 (6/10

    Alpha 冲刺 (6/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.组织会议 2.帮助队员解决 ...

  4. css动画库

    转载自:http://www.cnblogs.com/starof/p/4968769.html 本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方 ...

  5. ubuntu 搭建ss和使用方法

    一 ubuntu 搭建ssa.安装    sudo apt-get install python-gevent python-pip python-m2crypto    sudo pip insta ...

  6. EF6增改删等常用基类

    using System; using System.Linq; using System.Threading.Tasks; using System.Linq.Expressions; using ...

  7. shell脚本实例-while实现批量创建用户

    #!/usr/bin/bash while read line #读取一行结果 do if [ ${#line} -eq 0 ];then #如果有空行的话就跳过这次循环 contiune fi us ...

  8. Unity3D使用OpenFileDialog后崩溃

    http://ask.unitymanual.com/question/24922 找了很久,原来是我的dll文件引错了,名字都一样,应该引用unity安装目录下的System.Window.Form

  9. scrapy-CrawlSpider的rules使用规则

    1.allow设置规则的方法:要能够限制在我们想要的url上面.不要跟其他的url产生相同的正则表达式即可: 2.什么情况下使用follow:如果在爬取页面的时候,需要将满足当前条件的url再进行跟进 ...

  10. java学习笔记15(String 类,StringBuffer)

    /* * String类的特点: * 所有的""都是String的对象 * 字符串一旦创建就是常量,不能改变 */ public class StringDemo { public ...