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

网站建设 软件有哪些优化新十条

网站建设 软件有哪些,优化新十条,wordpress中上传整站,做门户网站有前途吗文件IO 系统调用&#xff08;不带缓冲的IO操作&#xff09;库函数&#xff08;默认带用户缓冲的IO操作&#xff09; 一、非缓冲IO 系统调用&#xff1a;即为不带缓冲的IO 1.打开文件open 2.读取文件read NAMEread - read from a file descriptorSYNOPSIS#include <unist…

文件IO


  • 系统调用(不带缓冲的IO操作)
  • 库函数(默认带用户缓冲的IO操作)

一、非缓冲IO

  • 系统调用:即为不带缓冲的IO

1.打开文件open

在这里插入图片描述

在这里插入图片描述

2.读取文件read

NAMEread - read from a file descriptorSYNOPSIS#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);DESCRIPTIONread() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf.On  files that support seeking, the read operation commences at the file offset, and the file offset is incremented by 	        the number of bytes read.  If the file offset is at or past the end of file, no bytes are read, and read() returns zero.If count is zero, read() may detect the errors described below.  In the absence of any errors, or if read() does not            check for errors, a read() with a count of 0 returns zero and has no other effects.According to POSIX.1, if count is greater than SSIZE_MAX, the result is implementation-defined; see NOTES for the upper          limit on Linux.RETURN VALUEOn success, the number of bytes read is returned (zero indicates end of file), and the file position is advanced by this        number.  It is not an error if this number is smaller  than  the  number  of  bytes requested;  this  may  happen  for          example because fewer bytes are actually available right now (maybe because we were close to end-of-file, or because we          are reading from a pipe, or from a terminal), or because read() was interrupted by a signal.  See also NOTES.On error, -1 is returned, and errno is set appropriately.  In this case, it is left unspecified whether the file position        (if any) changes.
  • fd:文件描述符
  • buf:一块内存的首地址,用于存放读取的数据
  • count:读取的字节数
  • 返回值:读取到的字节数,0表示文件读取结束

3.写入文件write

在这里插入图片描述

4.关闭文件close

在这里插入图片描述

5.创建文件create

在这里插入图片描述

二、案例使用

1.文件读操作

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>int main(int argc, char *argv[]) {int fd;if (argc < 2) {fprintf(stderr, "Usage : %s file\n", argv[0]);exit(1);}if ((fd = open(argv[1], O_RDONLY)) == -1) {perror("open");fprintf(stderr, "%d\n", errno);exit(1);}while (1) {char buff[512] = {0};//buff用于存放读出内容ssize_t num;if ((num = read(fd, buff, sizeof(buff))) > 0) {//0表示读到文件末尾 -1表示出错printf("%s", buff);} else {break;}}close(fd);return 0;
}

在这里插入图片描述

由于文件较大char buff[512]字节无法一次性读完,两次buff读的中间出现会一些特殊的符号(数组的结束位置\0被覆盖)。

为了解决上述问题,可以通过临时将buff[]数组的最后一个元素赋值为\0将其结束,从而解决buff[]数组后一个位置被覆盖的问题(有可能越界赋值)。

在这里插入图片描述

2.文件拷贝操作

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>int main(int argc, char *argv[]) {int fd1, fd2;if (argc < 3) {fprintf(stderr, "Usage : %s file1 file2\n", argv[0]);exit(1);}if ((fd1 = open(argv[1], O_RDONLY)) == -1) {perror("open1");fprintf(stderr, "%d\n", errno);exit(1);}if ((fd2 = open(argv[2], O_RDWR | O_CREAT, 0660)) == -1) {perror("open2");fprintf(stderr, "%d\n", errno);exit(1);}//文件拷贝操作while (1) {char buff[512] = {0};//buff用于存放读出内容buff[512] = '\0';ssize_t num1;ssize_t num2;if ((num1 = read(fd1, buff, sizeof(buff))) > 0) {//0表示读到文件末尾 -1表示出错//将读出的文件buff写入目标文件, 如果写入失败则直接退出循环if ((num2 = write(fd2, buff, num1)) < 0) break;} else {break;}}close(fd1);close(fd2);return 0;
}

在这里插入图片描述

文件拷贝成功。

三、缓冲IO

  • 库函数:即为默认带用户缓冲的IO操作(标准IO/用户缓冲IO)

1.打开文件fopen

在这里插入图片描述

2.读取文件fread

在这里插入图片描述

3.写入文件fwrite

在这里插入图片描述

4.关闭文件fclose

在这里插入图片描述

四、案例使用

1.文件拷贝

#include "head.h"int main(int argc, char *argv[]) {int opt;char rname[50] = {50}, wname[50] = {0};FILE *r, *w;//文件打开while ((opt = getopt(argc, argv, "r:w:")) != -1) {switch (opt) {case 'r' :strcpy(rname, optarg);break;case 'w' :strcpy(wname, optarg);break;default:fprintf(stderr, "Usage : %s -r file1 -w file2\n", argv[0]);break;}}if (!strlen(rname) || !strlen(wname)) {//判定 -r -w的参数是否为空fprintf(stderr, "Usage : %s -r file1 -w file2\n", argv[0]);exit(1);}if ((r = fopen(rname, "r")) == NULL) {//判定以r形式的文件是否打开成功perror("fopen1");exit(1);}if ((w = fopen(wname, "w")) == NULL) {//判定以w形式的文件是否打开成功perror("fopen2");exit(1);}//文件读取 写入ssize_t num;while (1) {char buff[1024] = {0};if ((num = fread(buff, 1, sizeof(buff), r)) > 0) {fwrite(buff, 1, num, w);} else {break;}}fclose(r);fclose(w);return 0;
}

在这里插入图片描述

http://www.tj-hxxt.cn/news/5796.html

相关文章:

  • 客户网站建设公司seo全网营销公司
  • 公司网站建设好如何制定会员营销方案
  • 营销类网站建设网络营销服务工具
  • 网站创建快捷方式专业的google推广公司
  • 网站产品类别顺序如果修改公司网站搭建
  • 南京大型行业网站建设济南最新消息
  • 什么值得买 wordpress开封网站快速排名优化
  • 怎样打开用sql做的网站百度推广怎么操作
  • 做企业网站设计无锡百度正规推广
  • 高端网页开发公司seo教程下载
  • 网站建设 蜂图网络搜索引擎优化的简写是
  • 电子商务网站建设课程总结重庆seo技术教程
  • 莱芜金点子招聘电子版企业网站seo服务
  • 手机视频网站开发电商运营入门基础知识
  • 电商网站开发报告中国站长网入口
  • 大型网站建设公司沈阳企业排名优化公司
  • 做电影网站量刑标准北京全网营销推广公司
  • 实验室网站开发框架什么是核心关键词
  • wordpress静态设置网络营销seo是什么意思
  • 自助建站系统凡科成人英语培训
  • 可以做家教的网站有哪些系统优化软件
  • 有效的网站需要做到什么意思可以免费网络推广网站
  • 做电影网站怎么盈利百度官方推广
  • 如何将网站做成app重庆网站建设哪家好
  • 两学一做专题网站用途百度快照收录
  • 游戏网站模板html搜索引擎优化行业
  • 用laravel做的网站今日的新闻
  • 网站开发实现53f客服聊天百度网页链接
  • wordpress 多级菜单插件韶山seo快速排名
  • 做徒步网站怎么样百度怎么搜索网址打开网页