UNIX系统文件I/O总结

    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则指定一个新的文件描述符来将一个文件描述符复制为另一个。



发布了15 篇原创文章 · 获赞 1 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章