频道栏目
首页 > 系统 > Linux > 正文

LINUX/UNIX的文件操作函数

2016-05-05 09:11:47         来源:talent_CYJ  
收藏   我要投稿

本文用于记录在LINUX编程中,常用的文件操作函数,包括系统调用和库函数。

针对输入输出操作,直接使用底层系统调用的一个问题是它们的效率十分低,原因在于:

1.使用系统调用会影响系统的性能,与函数调用相比,系统调用的开销要大些,因为在执行系统调用时,Linux必须从运行用户代码切换到执行内核代码,然后再返回用户代码。

2.硬件会限制对底层系统调用一次所能读写的数据块大小。比如,磁带机通常一次能写的数据块长度是10K,所以若你试图写的数据量不是10K的整数倍,磁带机还是以10K为单位卷绕磁带,从而在磁带上留下空隙

#include

size_t write(int fildes, const void *buf, size_t nbytes);

系统调用write作用:把缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。它返回实际写入的字节数,若文件描述符有错或底层的设备驱动程序对数据块长度比较敏感,该返回值可能会小于nbytes。如果函数返回0,就表示未写入任何数据;如果返回-1,就表示write调用中出现了错误,错误代码保存在全局变量errno里。 #include

size_t read(int fildes, void *buf, size_t nbytes);

系统调用read作用:从与文件描述符fildes关联的文件里读入nbytes个字节的数据,并把它们放到数据区buf中。它返回实际读入的字节数,该返回值可能会小于请求的字节数。如果函数返回0,就表示未读入任何数据,已到达文件尾。如果返回-1,就表示read调用中出现了错误,错误代码保存在全局变量errno里。 #include

#include

#include

int open(const char *path, int oflags);

int open(const char *path, int oflags, mode_t mode);

系统调用open作用:调用成功返回一个唯一的新文件描述符(总是一个非负整数),失败时返回-1并设置全局变量errno。准备打开的文件或设备的名字作为参数path传递给函数,oflags参数用于指定打开文件所采取的动作。oflags可选参数如下:

 

\

 

当使用带有O_CREAT标志的open调用来创建文件时,必须使用有3个参数格式的open调用,其中第三个参数mode有以下标志位:

 

\

 

以上这些标志位在头文件sys/stat.h中定义

#include

int close(int fildes);

终止文件描述符fildes与其对应文件之间的关联。文件描述符被释放并能够重新使用。close调用成功时返回0,出错时返回-1 #include

#include

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

offset参数用来指定位置,而whence参数定义偏移值,whence可以取下列值:

 

\

 

lseek返回从文件头到文件指针被设置处的字节偏移值,失败时返回-1。

#include

#include

#include

int fstat(int fildes, struct stat *buf);

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

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

fstat系统调用返回与打开的文件描述符相关的文件的状态信息,该信息将会写入到一个buf结构中,buf的地址以参数形式传递给fstat

相关函数stat和lstat返回的是通过文件名查到的状态信息。它们产生相同的结果,但当文件是一个符号链接时,lstat返回的是该符号链接本身的信息,而stat返回的是该链接指向的文件的信息。

stat结构一般包括如下成员:

 

\

 

stat结构中返回的st_mode标志还有一些与之关联的宏,它们定义在sys/stat.h中。

这些宏包括对访问权限、文件类型标志以及一些用于帮助测试特定类型和权限的掩码的定义。

 

\

 

#include

int dup(int fildes);

int dup2(int fildes, int fildes2);

dup系统调用提供一种复制文件描述符的方法,使我们能够通过两个或更多个不同的描述符来访问同一个文件。这可以用于在文件的不同位置对数据进行读写。dup系统调用复制文件描述符fildes,返回一个新的描述符。dup2系统调用则是通过明确指定目标描述符来把一个文件描述符复制为另外一个。

#include

FILE *fopen(const char *filename, const char *mode);

fopen库函数类似于底层的open系统调用。它主要用于文件和终端的输入输出。如果需要对设备进行明确的控制,则最好使用系统调用,因为这可以避免用库函数带来的一些潜在问题,如输入/输出缓冲。

fopen打开由filename参数指定的文件,并把它与一个文件流关联起来。mode参数指定文件的打开方式,它取下列字符串中的值:

 

\

 

fopen在成功时返回一个非空的FILE*指针,失败时返回NULL值,NULL值在stdio.h中定义

#include

size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);

相关TAG标签 函数 文件
上一篇:[易飞]取消库位规格书
下一篇:linux命令之 ifconfig
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站