当前位置: 首页 > news >正文

无锡做网站优化哪家好必应搜索引擎地址

无锡做网站优化哪家好,必应搜索引擎地址,网页设计主题内容,外籍人士在中国注册公司文件I/O和标准I/O 什么是文件I/O?什么是标准I/O? 文件I/O:文件I/O又称系统IO,系统调用,称之为不带缓存的IO(unbuffered I/O)。是操作系统提供的API接口函数。不带缓存指的是每个read,write都调用内核中的一个系统调…

文件I/O和标准I/O

什么是文件I/O?什么是标准I/O?

  • 文件I/O:文件I/O又称系统IO,系统调用,称之为不带缓存的IO(unbuffered I/O)。是操作系统提供的API接口函数。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。

  • 标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I/O提供了三种类型的缓存。

    (1)全缓存:当填满标准I/O缓存后才进行实际的I/O操作。 
    (2)行缓存:当输入或输出中遇到新行符时,标准I/O库执行I/O操作。 
    (3)不带缓存:stderr就是了。

文件I/O和标准I/O的区别 

文件I/O 又称为低级磁盘I/O,遵循POSIX相关标准。任何兼容POSIX标准的操作系统上都支持文件I/O。标准I/O被称为高级磁盘I/O,遵循ANSI C相关标准。只要开发环境中有标准I/O库,标准I/O就可以使用。(Linux 中使用的是GLIBC,它是标准C库的超集。不仅包含ANSI C中定义的函数,还包括POSIX标准中定义的函数。因此,Linux 下既可以使用标准I/O,也可以使用文件I/O)。

通过文件I/O读写文件时,每次操作都会执行相关系统调用。这样处理的好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销,标准I/O可以看成是在文件I/O的基础上封装了缓冲机制。先读写缓冲区,必要时再访问实际文件,从而减少了系统调用的次数。

文件I/O中用文件描述符表现一个打开的文件,可以访问不同类型的文件如普通文件、设备文件和管道文件等。而标准I/O中用FILE(流)表示一个打开的文件,通常只用来访问普通文件。

文件I/O:文件描述符

文件描述符不是指针,与标准IO FILE *fp不同,文件描述符是一个非负整数。 

  • 每个打开的文件都对应一个文件描述符。
  • 文件描述符是一个非负整数。
  • Linux为程序中每个打开的文件分配一个文件描述符。
  • 文件描述符从0开始分配,依次递增,每个3-1023的数字表示一个文件,数字不同,表示的文件不同,前三个被0-标准输入,1-标准输出,2-错误占用。
  • 文件IO操作通过文件描述符来完成。

文件I/O和标准I/O使用的函数 

标准I/O文件I/O(低级I/O)
打开fopen,freopen,fdopenopen
关闭fcloseclose

getc,fgetc,getchar

fgets,gets

fread

read

putc,fputc,putchar

fputs,puts,

fwrite

write

文件I/O打开函数:open()

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags); //不能创建文件
int open(const char *pathname, int flags, mode_t mode);

主要功能

open函数用来创建或打开一个文件。

返回值

 成功时返回文件描述符;出错时返回EOF

  • 打开文件时使用两个参数,不可创建文件
  • 创建文件时第三个参数指定新文件的权限,(只有在建立新文件时有效)此外真正建文件时的权限会受到umask 值影响,实际权限是mode-umaks
  • 可以打开设备文件,但是不能创建设备文件(创建设备文件用mknode)

参数介绍

 与标准I/O的权限对照(普通用户)

标准I/O文件I/O
rO_RDONLY
r+O_RDWR
wO_WRONLY | O_CREAT | O_TRUNC, 0664
w+O_RDWR | O_CREAT | O_TRUNC, 0664
a

O_WRONLY | O_CREAT | O_APPEND, 0664

a+O_RDWR | O_CREAT | O_APPEND, 0664

umask :用来设定文件或目录的初始权限

文件和目录的真正初始权限

文件或目录的初始权限(0664) = 文件或目录的最大默认权限(0666) - umask权限(0002)

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(int argc, const char *argv[])
{	int fd;fd = open("test.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);if (fd < 0) {printf("open file err\n");return 0;}printf("success\n");return 0;
}

文件I/O关闭函数:close()

 #include  <unistd.h>int  close(int fd);

主要功能

close函数用来关闭一个文件。

返回值

成功时返回0;出错时返回EOF

打开和关闭函数实例代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, const char *argv[])
{	int fd;int ret;fd = open("test.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);if (fd < 0) {printf("open file err\n");return 0;}printf("success, fd = %d\n", fd);if ((ret = close(fd)) < 0) {printf("close failed\n");}ret = close(fd);printf("close failed\n");return 0;
}

运行结果 

success, fd = 3
close failed

文件I/O读取函数:read()

 #include  <unistd.h>ssize_t  read(int fd, void *buf, size_t count);

主要功能

 read函数用来从文件中读取数据

  • 读到文件末尾时返回0
  • buf是接收数据的缓冲区
  • count不应超过buf大小

返回值

成功时返回实际读取的字节数;出错时返回EOF 

文件I/O写入函数:write()

 #include  <unistd.h>ssize_t  write(int fd, void *buf, size_t count);

主要功能

write函数用来向文件写入数据

  • buf是发送数据的缓冲区
  • count不应超过buf大小

返回值

成功时返回实际写入的字节数;出错时返回EOF

文件I/O定位函数:lseek()

 #include  <unistd.h>off_t  lseek(int fd, off_t offset, intt whence);

主要功能

lseek函数用来定位文件,参数offset和参数whence同fseek完全一样。参见:【嵌入式开发之标准I/O】流的刷新、定位以及格式化输出、输入

返回值

成功时返回当前的文件读写位置;出错时返回EOF

文件I/O读取、写入和定位函数实例代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>int main(int argc, const char *argv[])
{int fd;int ret;char buf[32] = "hello word";char buf2[32] = {0};//打开文件fd = open("test.txt", O_RDWR | O_CREAT | O_APPEND, 0666);if (fd < 0) {printf("open file err\n");return 0;}printf("success, fd = %d\n", fd);//写入数据if ((ret = write(fd, buf, strlen(buf))) < 0) {perror("write");goto end;}printf("write count = %d\n", ret);//定位文件到开头lseek(fd, 0, SEEK_SET);//读取文件if (( ret = read(fd, buf2, 32)) < 0) {perror("read");goto end;}printf("read count = %d\n", ret);buf2[31] = 0;printf("buf2 = %s\n", buf2);end:close(fd);return 0;
}

运行结果

success, fd = 3
write count = 10
read count = 10
buf2 = hello word

http://www.dt0577.cn/news/44788.html

相关文章:

  • ppt做多个网站临沂seo
  • 佛山做外贸网站平台搜索到的相关信息
  • 镇江群立网络科技有限公司seo搜索排名影响因素主要有
  • 优质的常州网站建设百度首页清爽版
  • 做网站一定要服务器吗彼亿营销
  • 上海城乡住房建设部网站首页现代营销手段有哪些
  • 三好街做网站公司网站怎么制作教程
  • 做家具的企业网站网络营销方案ppt
  • 渭南网站建设江苏搜索引擎优化
  • 宜兴公司做网站网络推广网站的方法
  • 张店政府网站建设公司培训总结精辟句子
  • 温州外贸网站建设外贸网站优化公司
  • 免费发布信息网站大全有哪些seo课程培训班
  • 嵊州建设银行取款网站seo教程技术优化搜索引擎
  • 做古玩的网站设计案例网
  • 中山市做网站网络营销具有哪些优势和吸引力
  • wordpress4.9.3漏洞厦门seo全网营销
  • html表单的完整代码短视频seo营销系统
  • 内蒙古自治区住房和城乡建设厅官网石家庄seo优化
  • 1688会提供网站建设江苏seo团队
  • 怎么做网站备案连接实体店100个营销策略
  • wordpress标题图标免费seo视频教学
  • 中国电商平台排行榜前十东莞seoseo关键词排名优化
  • axure做网站简单吗交换链接营销实现方式解读
  • 宁波建设网站制作最新实时新闻
  • 做网站的公司合肥个人网站推广平台大全
  • 北京网络营销的培训课程武汉网络推广seo
  • 网站网页设计案例kj6699的seo综合查询
  • 动画网站建设百度关键词优化平台
  • 英文在线购物网站建设小学四年级摘抄新闻