UNIX系统文件I/O总结

12 篇文章 0 订阅
11 篇文章 0 订阅

    UNIX 系统中文件I/O的五个主要函数是:open(),read(),write(),close(),ioctl()。

    open函数原型:

#include<fcntl.h>

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

对于open函数而言,仅当创建新文件时才使用第三个参数。pathname是要打开或创建的文件名,oflag参数用来说明此函数的多个选项,如O_RDONLY、O_WRONLY、O_RDWR等分别代表只读、只写、可读可写等,可用or构成或运算。若执行成功,函数返回打开或创建的文件描述符,否则返回-1,并置全局变量errno用来说明失败原因。

    read函数原型:

#include<unistd.h>

ssize_t read(int fields, void *buf, size_t nbytes);

若执行成功返回读到的字节数,若已到文件末尾则返回0,若出错则返回-1,并置errno值。返回的字节数有可能不等于nbytes,但并不代表读取出错。

    write函数原型:

#include<unistd.h>

ssize_t write(int fields, const void *buffer, size_t nbytes);

若执行成功返回写的字节数,若出错则返回-1.返回的字节数通常等于nbytes,否则表示出错。

    lseek函数原型:

#include<unistd.h>

off_t lseek(int fields, off_t offset, int where);

lseek函数用于显式的为打开的文件设置其偏移值,where有三个选项,SEEK_SET、SEEK_CUR、SEEK_END,分别表示从文件开始处计算、从当前值开始计算、从文件末尾开始计算。若成功则返回新的文件偏移量,出错则返回-1.

    close函数原型:

#include<unist.h>

int close(int fields);
执行成功返回0,出错返回-1。

    ioctl函数原型:

#include<unistd.h>

int ioctl(int fields, int cmd, ...);

ioctl函数对描述符引用的对象执行cmd参数值哦i给出的操作,根据特定设备的不同,可能会有第三个参数。

fsat、stat和lstat系统调用

#include<unistd.h>
#include<sys/stat>
#include<sys/types.h>

int fstat(int fields, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);

这三个函数都返回与打开文件描述符相关的文件的状态信息,该信息会被存储到struct stat *buf中。fstat通过文件描述符,而后两个函数通过文件名,效果相同。但是当文件是一个符号链接时,lstat返回的是该符号链接本身的信息,而stat返回的是该链接指向的文件的信息。

dup和dup2系统调用

#include<unistd.h>

int dup(int fildes);
int dup2(int fildes, int newfildes);
这两个函数用于复制文件描述符,使我们可以通过两个或多个文件描述符去访问文件。dup复制文件描述符并返回一个新的描述符,而dup2则指定一个新的文件描述符来将一个文件描述符复制为另一个。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值