设为首页 加入收藏

TOP

总结文件操作函数(二)-C语言(一)
2015-01-22 21:26:23 来源: 作者: 【 】 浏览:126
Tags:总结 文件 操作 函数 语言

格式化读写:

#include

int printf(const char *format, ...); //相当于fprintf(stdout,format,…);

int scanf(const char *format, …);

int fprintf(FILE *stream, const char *format, ...); //中间的参数为写入文件的格式

int fscanf(FILE *stream, const char *format, …); //中间为从文件中读取的格式

int sprintf(char *str, const char *format, ...); // eg:sprintf(buf,”the string is;%s”,str);

int sscanf(char *str, const char *format, …); //从字符串中格式化读取

以f开头的将格式化后的字符串写入到文件流stream中

以s开头的将格式化后的字符串写入到字符串str中

内核为每个进程维护一个已打开文件的记录表,文件描述符是一个较小的正整数(0―1023),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读、写、创建、删除等操作。常用基于文件描述符的函数有open(打开)、creat(创建)、close(关闭)、read(读取)、write(写入)、ftruncate(改变文件大小)、lseek(定位)、fsync(同步)、fstat(获取文件状态)、fchmod(权限)、flock(加锁)、fcntl(控制文件属性)、dup(复制)、dup2、select和ioctl。基于文件描述符的文件操作并非ANSI C的函数。

此类函数打开文件后将文件名转化为当前最小可用的文件描述符,0,1,2已经被占用!

#include //头文件

#include

#include //flag 常用的包括O_RDONLY,O_WRONLY,O_CREAT只读只写创建

int open(const char *pathname, int flags); //文件名 打开方式

int open(const char *pathname, int flags, mode_t mode);//文件名 打开方式 权限

open(pathname,O_CREAT|O_WRONLY,mode; //创建并读取文件

open()函数出错时返回-1,相关参数如下:

flags和mode都是一组掩码的合成值,flags表示打开或创建的方式,mode表示文件的访问权限。


通过文件描述符读写文件

函数原型为:

#include

ssize_t read(int fd, void *buf, size_t count);//文件描述词 缓冲区 长度 数据从文件读到buf

ssize_t write(int fd, const void *buf, size_t count); //buf中字符串写入文件

fd=1,write表示将文件从标准输出流输出,fd=0,read表示从标准输入流读入到buf中

对于read和write函数,出错返回-1,读取完了之后,返回0, 其他情况返回读写的个数(字节数)。

获取文件信息函数:

#include

int stat(const char *file_name, struct stat *buf); //通过文件名获取文件信息,并保存在buf所指的结构体stat中

int fstat(int fd, struct stat *buf); //文件描述词 stat结构体指针

返回值: 执行成功则返回0,失败返回-1,错误代码存于errno(需要include

通过man stat查找结构体中包含文件的具体信息

select函数,目前本人多用于函数读写动态监听:

#include

#include

int select(int maxfd, fd_set *readset,fd_set *writeset, fd_set *exceptionset, const struct timeva l * timeout);

返回:就绪描述字的正数目,0――超时,-1――出错

参数解释:

maxfd: 最大的文件描述符(其值应该为最大的文件描述符字 + 1)

readset: 内核读操作的描述符字集合

writeset:内核写操作的描述符字集合

exceptionset:内核异常操作的描述符字集合

timeout:等待描述符就绪需要多少时间。NULL代表永远等下去,一个固定值代表等待固定时间,0代表根本不等待,检查描述字之后立即返回。

其中readset、writeset、exceptionset都是fd_set集合。该集合的相关操作如下:

void FD_ZERO(fd_set *fdset); /* 将所有fd清零 */

void FD_SET(int fd, fd_set *fdset); /* 增加一个fd */放入监听集合

void FD_CLR(int fd, fd_set *fdset); /* 删除一个fd */

int FD_ISSET(int fd, fd_set *fdset); /* 判断一个fd是否为1 */

一般来说,在使用select函数之前,首先要使用FD_ZERO和FD_SET来初始化文件描述符集,在使用select函数时,会根据设置时间测试set集合中各个描述符的变化,某个描述符发生变化,会将描述符变为1,set变化说明当前并未阻塞。可循环使用FD_ISSET测试描述符集,测试描述符是否为1,这样就比较好理解了。在执行完对相关文件描述符之后,使用FD_CLR来清除描述符集。

另外,select函数中的timeout是一个struct timeva l类型的指针,该结构体如下:

struct timeva l

{

long tv_sec; /* second */ //秒

long tv_usec; /* microsecond */ //微秒

};

将文件名描述符转化为文件指针(多用于不可用fopen打开的管道):

fdopen函数  相关函数:fopen,open,fclose

#include

FILE * fdopen(int fildes,const char * mode);

函数说明:fdopen取一个现存的文件描述符(我们可能从 o p e n , d u p , d u p 2 , f c n t l或p i p e函数得到此文件描述符)并使一个标准的I / O流与该描述符相结合。

此函数常用于由创建管道和网络通信通道函数获得的描述符。

因为这些特殊类型的文件不能用标准I/O fopen函数打开,首先必须先调用设备专用函数以获得一个文件描述符,然后用f d o p e n使一个标准I / O流与该描述符相结合。   

fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串   则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。   mode有下列几种形态字符串:   r 打开只读文件,该文件必须存在。   w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。      a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。   

对于f d o p e n,t y p e参数的意义则稍有区别。因为该描述符已被打开

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇排序(5)---------快速排序(C语言.. 下一篇C语言柔性数组

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: