ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IO函数代码示例(open,close,write,lseek,read)

2021-11-04 19:59:15  阅读:176  来源: 互联网

标签:lseek 示例 read int 描述符 fd 文件 offset include


        本代码基于linux系统下的C/C++,相关函数原型介绍如下

open():

int open(const char *pathname, int flags, mode_t mode);

参数分别为:文件所在路径,打开方式,文件的权限

成功返回一个最小且未被占用的文件描述符;失败返回-1.

close():

int close(int fd);

参数接收的是一个文件描述符.

read():

ssize_t read(int fd, void *buf, size_t count);

参数分别为:文件描述符,指针数组,文件大小;返回值可以用一个int类型变量来接收

write():

ssize_t write(int fd, const void *buf, size_t count);

参数分别为:文件描述符,常量字符数组(一个字符串),写入字符串或字符的大小;

lseek():

off_t lseek(int fd, off_t offset, int whence);

参数分别为:文件描述符,当前位置设置的偏移量,字符位置.

whence可设置的值有以下三种:

       SEEK_SET
              The offset is set to offset bytes.

       SEEK_CUR
              The offset is set to its current location plus offset bytes.

       SEEK_END
              The offset is set to the size of the file plus offset bytes.

以下代码用来示例几个函数进行读写等操作:

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdio.h>
using namespace std;
int main(int argc,char*argv[])
{
  //打开文件,没有就创建
  int fd =open(argv[1],O_RDWR | O_CREAT,0777);
  if(fd<0)
  {
   cout<<"打开失败"<<endl;
   return -1;
  }
  //写文件
  //ssize_t write(int fd, const void *buf, size_t count);
  write(fd,"hello,my guys!!",strlen("hello,my guys!!"));
  //移动文件指针到开始处
  //off_t lseek(int fd, off_t offset, int whence);
  //whence 三种设定 文件头,文件尾(最大),当前位置
  lseek(fd,0,SEEK_SET);
  //读文件
  char buf[1024];
  //进行初始化,它可以逐字节把整个数组设置为一个指定的值
  memset(buf,0x00,sizeof(buf));
  int num=read(fd,buf,sizeof(buf));
  cout<<"num="<<num<<"  buf= "<<buf<<endl;
  close(fd);
  return 0;
}

开始并没有指定文件路径,用arg[1]命令行参数,这样文件名就不会写死,方便更改。

使用命令进行编译,执行时指定 进行创建并读写操作的文件名user.log。得到结果读取15个字符hello,my guys!!

 同时 vi user.log 发现文件已经写入

 完结!!!!!!

标签:lseek,示例,read,int,描述符,fd,文件,offset,include
来源: https://blog.csdn.net/m0_60663280/article/details/121149421

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有