码迷,mamicode.com
首页 > 系统相关 > 详细

linux I/O函数使用

时间:2019-02-25 13:37:35      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:eof   pre   参数   权限   博文   type   文章   nbsp   linu   

一、lseek

  lseek函数的作用是用来重新定位文件读写的位移。

  头文件以及函数声明

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);

  lseek()函数会重新定位被打开文件的位移量,根据参数offset以及whence的组合来决定:

  SEEK_SET:
    从文件头部开始偏移offset个字节。
  SEEK_CUR:
    从文件当前读写的指针位置开始,增加offset个字节的偏移量。
  SEEK_END:
    文件偏移量设置为文件的大小加上偏移量字节。

例程:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

#define BUFFER_SIZE 1024
#define SRC_FILE_NAME "src_file"
#define DEST_FILE_NAME "dest_file"
//根据传入的参数来设置offset
#define OFFSET (atoi(args[1])) 

int main(int argc, char*args[]) {
    int src_file, dest_file;
    unsigned char buff[BUFFER_SIZE];
    int real_read_len, off_set;
    if (argc != 2) {
        fprintf(stderr, "Usage: %s offset\n", args[0]);
        exit(-1);
    }
    src_file = open(SRC_FILE_NAME, O_RDONLY);
    dest_file = open(DEST_FILE_NAME, O_WRONLY | O_CREAT, S_IREAD | S_IWRITE );//owner权限:rw
    if (src_file < 0 || dest_file < 0) {
        fprintf(stderr, "Open file error!\n");
        exit(1);
    }
    off_set = lseek(src_file, -OFFSET, SEEK_END);//注意,这里对offset取了相反数
    printf("lseek() reposisiton the file offset of src_file: %d\n", off_set);
    while((real_read_len = read(src_file, buff, sizeof(buff))) > 0) {
        write(dest_file, buff, real_read_len);
    }
    close(dest_file);
    close(src_file);
    return 0;
}
--------------------- 
作者:Sino_Crazy_Snail 
来源:CSDN 
原文:https://blog.csdn.net/Sino_Crazy_Snail/article/details/80777316 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

linux I/O函数使用

标签:eof   pre   参数   权限   博文   type   文章   nbsp   linu   

原文地址:https://www.cnblogs.com/jly594761082/p/10430327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!