先来介绍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. [PyImageSearch] Ubuntu16.04 使用OpenCV和python识别信用卡 OCR

    在今天的博文中,我将演示如何使用模板匹配作为OCR的一种形式来帮助我们创建一个自动识别信用卡并从图像中提取相关信用卡数位的解决方案. 今天的博文分为三部分. 在第一部分中,我们将讨论OCR-A字体,这 ...

  2. Gym - 100971J (思维+简单bfs)

    题目链接:http://codeforces.com/gym/100971/problem/J J. Robots at Warehouse time limit per test 2.0 s mem ...

  3. linux 下ftp几种上传和下载方式

    1. ftp自动登录批量下载文件. 复制代码代码如下: #####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<& ...

  4. 关于时间戳截取的隐藏bug

    之前写时间戳,要截取后六位 原写法: function timeStamp() { const date = new Date() const month = date.getMonth() + 1 ...

  5. WIFI探针 搞定

  6. Arduino+Avr libc制作Badusb原理及示例讲解

    一. 前言 2014年美国黑帽大会上研究人员JakobLell和Karsten Nohl展示了badusb的攻击方法后,国内与badusb相关的文章虽然有了一些,但是大部分人把相关文章都阅读后还是会有 ...

  7. 利用python实现电影推荐

    "协同过滤"是推荐系统中的常用技术,按照分析维度的不同可实现"基于用户"和"基于产品"的推荐. 以下是利用python实现电影推荐的具体方法 ...

  8. day12作业

  9. oracle函数创建及调用

    创建函数的语法如下: CREATE [OR REPLACE] FUNCTION function_name[ (argment [ { IN | OUT | IN OUT } ] Type , arg ...

  10. fatal: unable to access 'https://xxxxx': SSL connect error

    /********************************************************************** * fatal: unable to access 'h ...