IO函数代码示例(open,close,write,lseek,read)
作者:互联网
本代码基于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