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

网站建设费属于什么税目网址制作网站

网站建设费属于什么税目,网址制作网站,重庆建设工程信息网官网首页入口,网站开发应该学哪门语言目录 0.前言 1.C / C -文件操作 1.1 C语言文件操作 1.1.1 C语言文件打开/关闭/写入 1.1.2 C语言文件的追加操作 1.1.3 C语言文件的读取 1.2 C语言文件操作 1.2.1 C文件打开 / 关闭 / 写入 1.2.2 C文件读取 1.2.3 文件追加 2.三个默认输入输出流 2.1 C语言中的三…目录 0.前言 1.C / C -文件操作 1.1 C语言文件操作 1.1.1 C语言文件打开/关闭/写入 1.1.2 C语言文件的追加操作 1.1.3 C语言文件的读取 1.2 C语言文件操作 1.2.1 C文件打开 / 关闭 / 写入 1.2.2 C文件读取 1.2.3 文件追加 2.三个默认输入输出流 2.1 C语言中的三个 2.2从三个流的操作引入一切皆文件 2.2.1主体操作 2.2.2标准输出和标准错误的小区别 2.2.3从文件操作体会一切皆文件 2.3从流文件操作看OS对底层的封装 3.系统调用接口文件操作 3.1 open接口 3.1.1 open参数与返回值 3.1.2 open的实践使用 3.2 write接口 3.3 read接口 3.4 write追加 0.前言 本文所有代码都以上传至giteepractice14 · onlookerzy123456qwq/Linuxtwo - 码云 - 开源中国 (gitee.com)1.C / C -文件操作 我们首先来复习一下C语言C的对于文件操作提供的接口。1.1 C语言文件操作 1.1.1 C语言文件打开/关闭/写入 //FILE *fopen(const char *path, const char *mode); FILE* f_test fopen(./diary.txt,w); //打开文件需要检查是否打开成功 if(f_test NULL) { printf(file open error\n); return 1; } //对文件进行写入操作(写入5个hello world\n) int k 5; while(k--){ //int fputs(const char *s, FILE *stream); fputs(hello world\n,f_test); } //打开文件需要关闭文件 //int fclose(FILE *fp); fclose(f_test); return 0; 首先我们如何在C语言当中打开文件使用的是fopen接口返回的是一个FILE*指针我们拿到这个FILE* 指针就可以通过FILE指针对打开的相应文件操作。 fopen的第一个参数是path指明这个文件所在的路径文件名我们例子中的./diary.txt指明的就是当前文件夹下的diary.txt文件进行打开。 fopen的第二个参数是mode我们要填入的是打开这个文件的模式例如你是以只读方式或写方式或追加方式等对文件进行打开。PS我们打开文件之后需要记住两件事第一件事是检查文件打开是否成功如果fopen失败返回的是NULL。第二件事是fclose关闭文件不然会对后续文件的操作产生影响此处如果没有fclose数据留在缓冲区中虽然可以成功写入但是无法成功读取。然后我们讲C语言的写入文件接口fputs它的第一个参数s是要写入文件的字符串写入到的目标文件是第二个参数FILE* stream也就是fopen的返回值指代要写入的文件是谁。1.1.2 C语言文件的追加操作 这里我们要注意需要以追加append的方式打开这个文件,即fopen的第二个参数我们传入a然后我们调用C语言写入接口就会默认在文件尾进行写入完成对原来内容的追加。//FILE *fopen(const char *path, const char *mode); FILE* f_test fopen(./diary.txt,a); //打开文件需要检查是否打开成功 if(f_test NULL) { printf(file open error\n); return 1; } //对文件append操作 int k 5; while(k--){ fputs(hello world\n,f_test); } //打开文件需要关闭文件 fclose(f_test); 1.1.3 C语言文件的读取 这里读取我们使用的是fgets接口 fgets接口是一次读取文件的一行内容到buffer接收缓冲区里面第一个参数填buffer接口缓冲区即把从文件中读取到的一行内容放在哪里。 第三个参数是FILE* stream表征的是从哪个文件里面进行一行的读取。第二个参数int size它的意义是期待最多读取size-1个字符最多读取size-1个字符也可以读取不到这么多所以只需要你填入buffer的size大小即可。fgets接口会在读取到的字符串的最后自动添加\0。//FILE *fopen(const char *path, const char *mode); FILE* f_test fopen(./diary.txt,r); //打开文件需要检查是否打开成功 if(f_test NULL) { printf(file open error\n); return 1; } //对文件read操作 //create buffer to receive the data of the file we readchar buffer[256];memset(buffer,0,sizeof(buffer));printf(We read file:\n);//char *fgets(char *s, int size, FILE *stream);//fgets从流上读取最多size-1个字符并将其存储到s指向的buffer中当遇到新的一行或文件结束标志时结束while(fgets(buffer,sizeof(buffer),f_test) ! NULL){//每次都读取一行到buffer里面所以说每次读取一行我们就要对这个打印这一行否则就会一行一行覆盖前面读取的内容printf(%s\n,buffer);}//读取完毕文件之后需要检查是否读取完成成功if(!feof(f_test)){printf(file read not to end,file quit illegally!\n);}//打开文件需要关闭文件 fclose(f_test); 每次读取的是一行的内容到缓冲区当中所以说每次读取一行我们就要对这个打印这一行否则就会被下一次fgets读取的下一行的内容覆盖buffer中前面读取的内容。然后还要记得对读取之后进行检查因为存在读取失败的问题feof接口检查此时文件是否已经到文件尾即我们是否已经读取完毕。1.2 C语言文件操作 1.2.1 C文件打开 / 关闭 / 写入 //explicit ofstream (const char* filename, ios_base::openmode mode ios_base::out);std::ofstream ofs(./diary2.txt,std::ios::out | std::ios::binary);//打开文件就要检查是否打开成功if(!ofs.is_open()){coutfile open errorendl;return 1;}//对文件进行写入string name 张三;int age 18;ofs 姓名name 年龄ageendl;//还可以调用ofs的write接口进行写入string message_temp Happy Everyday!~\n;for(int i 0;i3;i){ofs.write(message_temp.c_str(),message_temp.size());}//即使我们不主动close也会在析构的过程中自动关闭但是我们提倡主动释放减少资源占据ofs.close();return 0;C使用的ofstream类的对象进行对目标文件的打开ofstream构造函数的第一个参数是要打开的文件路径文件名第二个参数是打开的方式是什么比如默认缺省不写是文本写入我们上述代码块的第二行是二进制写入的方式打开文件。打开文件之后我们有两件事第一件事是查看文件是否被打开成功我们调用的是ofstream对象的is_open()成员函数第二件事是关闭文件调用的是ofstream对象的close()成员函数。当然C当中有析构函数可以不用主动closeofs对象生命周期结束的时候可以自动调用close但是能主动调就主动调减少资源的占据。1.2.2 C文件读取 C文件读取我们使用的是ifstream类对象构造函数第一个参数是要进行读取文件的路径文件名第二个参数是传入的打开文件的模式默认是文本读取下面代码我们设置的是二进制读取模式。ifstream读取文件内容的方式可以调用对于int string类等自己封装的的operator函数也可以调用ifstream类的成员方法read。//explicit ifstream (const char* filename, ios_base::openmode mode ios_base::in);std::ifstream ifs(./diary2.txt,ios_base::in | ios_base::binary);//打开文件就要检查是否打开成功if(!ifs.is_open()){coutfile open errorendl;return 1;}//对文件进行读取string name;int age 0;ifs name age;//打印读取到的信息coutWe Read:\n姓名name 年龄ageendl;//还可以使用read语法char buffer[128];//读取到的内容放到buffer当中,期待读取的字节数是sizeof(buffer)ifs.read((char*)buffer,sizeof(buffer));coutWe Also Read:\nbufferendl;//即使我们不主动close也会在析构的过程中自动关闭但是我们提倡主动释放减少资源占据ifs.close(); 如图看到我们的读取文件代码是成功的。1.2.3 文件追加 C的追加写入我们只要在写入ofstream类构造函数基础上设置app追加模式然后进行对ofs的写入即可。//explicit ofstream (const char* filename, ios_base::openmode mode ios_base::out);std::ofstream ofs(./diary2.txt,std::ios::app | std::ios::binary);//打开文件就要检查是否打开成功if(!ofs.is_open()){coutfile open errorendl;return 1;}//对文件进行追加写入string name 李四;int age 19;ofs name ageendl;//还可以调用ofs的write接口进行写入string message_temp Not Bad Everyday!~\n;for(int i 0;i3;i){ofs.write(message_temp.c_str(),message_temp.size());} //即使我们不主动close也会在析构的过程中自动关闭但是我们提倡主动释放减少资源占据ofs.close();2.三个默认输入输出流 2.1 C语言中的三个 C程序在加载到内存成为一个进程的时候面会默认打开三个输入输出流stdinstdoutstderr。他们都是FILE*类型。这个FILE的本质是C语言提供的一个结构体可以通过这个结构体找到这个文件。站在体系结构的角度理解stdin对应的设备是键盘stdout对应的硬件设备是显示器stderr对应的硬件设备是显示器。它们的学名分别叫做标准输入标准输出标准错误。同时C当中也会默认有三个对象coutcincerr也分别对应标准输入标准输出标准错误也分别对应键盘显示器显示器。2.2从三个流的操作引入一切皆文件 2.2.1主体操作 刚刚我们接触的C语言的三个默认打开的文件流stdinstdoutstderr都是FILE*类型其实都是可以当做打开的文件FILE* f_stream直接去操作的。//C语言会默认打开三个文件流stdin stdout stderr6 //我们可以直接使用这三个FILE* 文件流 7 const char* w_str hello fprintf stdout\n;8 fprintf(stdout,w_str,strlen(w_str)); 我们看到fprintf stdout就是往stdout这个文件也就是显示器进行写入。效果是等同于这个printf的。char buffer[128]; memset(buffer,0,sizeof(buffer)); fscanf(stdin,%s,buffer); printf(We Read From stdin:\n%s\n,buffer); 我们看到fsacnf stdin就是往stdin这个文件也就是键盘进行写入。效果是等同于scanf的。const char* w_str hello fprintf stderr\n; fprintf(stderr,w_str,strlen(w_str)); 我们看到fprintf stderr就是往stderr这个文件也就是显示器进行写入。2.2.2标准输出和标准错误的小区别 我们往stdout和stderr写入本质都是往对应的显示器写入他们对应的设备是一样的使用写入接口如fprintf对这两个标准输出标准输出本质都是在显示器写入那有什么小文件写入呢区别就在于输出重定向的时候只有我们往标准输出sdtout写入的内容才会被重定向写入到目标文件当中而向stderr标准错误写入的的内容是不会被重定向的仍然被写入打印到了屏幕当中。下面我们演示重定向操作2.2.3从文件操作体会一切皆文件 可是你是否有想过这个stdoutstdinstderr都是FILE*类型也可以被当做文件使用可是他们本质代表的是显示器键盘这些硬件啊难道这些硬件都是一种文件file吗 事实上在LinuxOS看来这些都是文件刚刚我们做的实验fputs向 一般文件 或者 硬件设备 都能进行写入一般文件都存储在磁盘上所以其实这些文件的本质也是硬件也可以证明硬件设备也是一种FILE。 在LinuxOS看来所有的存储在磁盘上的file这些是我们通常认识的一般文件事实上我们可以继续扩展所有的硬件也是文件 》得出一个结论Linux下一切皆文件2.3从流文件操作看OS对底层的封装 OS是软件和硬件的管理者任何外部势力要访问都要经由OS。所有的文件file都是储存在磁盘当中的或者说是磁盘的一部分所以他们是硬件所以我们刚刚的写入/读取文件硬件的操作都是经由OS之手的。OS不相信任何人任何用户想要访问只能通过OS对上提供的系统调用接口System Call进行合法的访问。所以我们对文件软件 / 硬件写入本质都是通过System Call 即系统调用接口访问到的所以我们可以大胆的得出一个结论 几乎所有的语言fopen fclose fread fwrite fgetsfputs fgetc fputc 等这些对文件硬件进行读写接口的实现这个过程一定是经由了System Call层故这些上层语言的接口一定使用OS提供的系统调用接口封装实现的我们接下来演示系统调用接口当然这里演示的是文件的系统调用接口因为这个离着OS更近我们可以用语言OS System Call层进行讲解。 万变不离其宗所有语言的文件调用接口都是对文件操作的System Call系统调用接口的封装。 我们把底层学好了上层怎么学都可以上面我们是从OS对软件硬件的管理的角度理解的系统调用与上层语言之间的关系。3.系统调用接口文件操作 3.1 open接口 3.1.1 open参数与返回值 open接口是Linux中的系统调用接口负责对文件的打开第一个参数pathname传入的是想要打开文件的路径文件名第二个参数int flags是打开文件的标志即我们是以什么方式打开这个文件只读只写还是追加第三个参数是mode_t mode这个是打开文件的权限设置。open的返回值是int这个int其实就是文件描述符fdfile descriptor。如果打开文件失败返回-1并设置全局错误码。pathname好理解就是路径文件名。int flags也可以直接类比C语言fopen接口的打开方式wr“a”但是这里传入的实际上是一个int但是我们不直接传入int而是通过系统文件给我们提供的宏如下图进行传入。int fd open(./diary3.txt,O_WRONLY | O_CREAT,xxxxx); 举个上面代码片的例子第一个参数指定打开的路径文件名第二个参数是两个宏的或运算这个就是我们传入的int。 从感性的角度理解O_WRONLY是以只写方式打开这个文件O_CREAT是创建这个文件所以我们是以如果这个文件不存在我们就创建然后以只写的方式打开。这个O_WRONLY | O_CREAT其实就可以直接类比为C语言fopen的w打开方式从理性的角度理解这两个宏可以进行或运算成为一个int说明这些宏本身就是一个数然后这些宏或运算起来可以表征某种信息open接口接收到这个整形信息就知道你要以什么方式打开这个文件。现在有6个bit位比如第一个bit位代表米饭第二个bit位代表馒头第三个bit位代表牛肉第四个bit位代表羊肉第五个bit位代表可乐第六个bit位代表雪碧我传入的是011001然后open接口就知道你要吃的是馒头牛肉雪碧。 这里的每一个宏其实就代表了某一个特定bit位的数在open当中就看int的32个bit位的有无情况来设定你是在以什么方式在打开这个文件如第一个bit标志位, 看看你是想创建这个文件 第二个bit位的有代表你是想写入这文件。所以此时O_WRONLY是0b1O_CREAT是0b10O_WRONLY | O_CREAT就是0b0000 0011。 本质上这些宏就是在代表不同的bit位。而且不同的宏代表不同的bit位。我们的理解是这样的我们紧接着看一下系统文件是怎么样的通过grep指令我们看到#define的这些宏就是bit位样式的定义这验证了我们的想法。理解完第二个参数我们理解第三个参数mode_t mode任何一个文件都有一个重要的属性即文件权限尤其是你没有文件的时候你创建一个文件肯定要设置这个文件的权限所以这个mode其实就是传入对于ownergroupother的权限设置。我们采用八进制方案传入0644本质就是rw-r--r--。int fd open(./diary3.txt,O_WRONLY | O_CREAT,0644); 不是你的生活充满阳光总有人替你负重前行C语言封装都替你搞好了mode权限管理同时根据我们之前的理论C语言上的打开文件接口fopen都是封装的系统调用open这个mode参数fopen都已经帮我们搞好了 你在C语言的接口对文件的权限(mode)都是漠不关心的因为这些概念都是和OS强相关的。C语言给你做封装你也就不用再关心权限这些细节了open系统调用接口的返回值int是文件描述符可以类比fopen的返回值FILE* fp这个其实就是我们后续对特定文件进行写入读取的索引如何知道你是在对哪个文件进行写入C语言用的是fopen打开文件的返回值FILE* fp系统调用这里用的是open打开文件的返回值int fd。3.1.2 open的实践使用 我们open一个文件之后不管怎么样一定要记得关闭一个这个文件我们配套的系统调用关闭文件的接口是close(int fd)。所以完整的打开一个文件的过程://int open(const char *pathname, int flags, mode_t mode);//int fd open(./diary3.txt,O_WRONLY | O_CREAT);//这里的O_WRONLY,O_CREAT的本质都是代表一个bit为1的整形值通过或出的值的方式设计相应标志位//open接口就知道你是以什么方式打开的了//这里O_WRONLY代表写的方式打开接口O_CREAT代表创建这个文件这两个的组合就是C中的“w的意义//0644代表设置对于打开这个文件的权限管理模式设置采用八进制表示法int fd open(./diary3.txt,O_WRONLY | O_CREAT,0644);//检查是否打开成功(依托的是返回值)if(fd0){printf(file open error\n);return 1;}//关闭文件close(1);\ 3.2 write接口 系统调用write它的作用就是对特定文件进行写入操作int fd表征你在具体往哪个文件写buf表示的是你要写入的内容缓冲区size_t count是你期待写入的字节数。返回值ssize_t是你实际向文件写入的字节数目如果写入失败返回-1。你想写入的字节数不一定都写入万一你的传的count过大了那写入的数目就是错的真正的写入的字节数还是看write的返回值直接结合open上写入文件的操作//1.打开/创建文件int fd open(./diary3.txt,O_CREAT | O_WRONLY);//检查是否打开成功if(fd0){perror(open);return 1;}//2.对文件进行写入char buffer[128] Never ever ever ever give up\n;//系统调用接口write://第三个参数是你期待写入的字节数,返回值是实际上写入成功的字节数//我们写入字符串不写入\0因为这是仅仅只是C语言层面对字符串的标记而已ssize_t w_size write(fd,buffer,strlen(buffer));//检查写入if(w_size0){perror(write);return 2;}printf(We Write File Success:%s,buffer);//关闭文件close(fd); 3.3 read接口 系统调用read它的作用就是对特定文件进行读取操作int fd表征你在具体往哪个文件读buf表示的是你要接收读取内容的缓冲区size_t count是你期待读取的字节数量。返回值ssize_t是你实际向文件读取到的字节数目如果读取失败返回-1。你想读取到的字节数不一定能读取这么多万一你的传的count过大了那实际读取的数目就是错的真正的读取到的字节数还是看read的返回值write要注意的是不要写入字符串最后的\0这个字节read要注意的是你在读取的时候要注意给buffer预留一个字节自己主动填写\0所以我们期待读取的count字节数不要写成sizeof(buffer)而是要写sizeof(buffer)-1。//1.打开/创建文件int fd open(./diary3.txt,O_RDONLY);//检查是否打开成功if(fd0){ perror(open); return 1; } //2.对文件进行读取 char buffer[128] ;memset(buffer,0,sizeof(buffer));//系统调用接口read://第三个参数是你期待读到的字节数,返回值是实际上读取成功的字节数ssize_t r_size read(fd,buffer,sizeof(buffer)-1);//检查写入 if(r_size0){perror(read); return 2; } //[0,r_size-1]是读取到的字节数据buffer[r_size] \0;printf(We Read File Success:%s\n,buffer);//关闭文件close(fd); 3.4 write追加 //1.打开/创建文件//ERROR:int fd open(./diary3.txt,O_APPEND); 要追加首先要有WR写权限int fd open(./diary3.txt,O_WRONLY | O_APPEND); 我们只要在打开open这个文件的时候在O_WRONLY的基础上再或上一个O_APPEND标志即可。然后就用相应的write写入系统调用就是在文件尾进行写入即追加。
http://www.lakalapos1.cn/news/29208/

相关文章:

  • 广州市网站建设qq网站代码
  • 如何做ico空投网站wordpress美食
  • 福州网站搭建专业网站设计力荐亿企邦
  • roseonly企业网站优化中山网站制作费用
  • 有域名有空间如何做网站个人怎么做淘宝客网站
  • 建设部网站官网合同防做网站视频
  • 网站实现步骤及方法是怎么弄免费的php空间做网站
  • 专业做卖菜的网站网站搭建推广优化
  • 北京中交建设工程咨询有限公司网站网站怎么做网站收录
  • 公司网站维护费怎么做分录如何制作网站教程视频
  • 自己做的网页加在网站文章上为什么打不开网站后台模板安装显示不了
  • 韩国的汽车设计网站百度网站建设中的自由容器
  • 网站设计制作工作室微信 网站提成方案点做
  • 网站开发必学书籍社交新零售
  • 网站建设冫金手指谷哥十四简单的网站建设
  • 亚马逊网站链接html网页设计代码作业简单
  • 备案中又需要建设网站cms做网站
  • 村网通为每个农村建设了网站公司做网站都需要什么流程
  • 网站开发必看书籍wordpress英文源码
  • 网站设计做哪些准备一起来看在线观看免费
  • 建设网站培训中国纪检监察报 沈志莉
  • 网站开发嘉比格网络四川重大新闻事件
  • wordpress网站实例全国新闻
  • 百度指数 多少流量 网站名互动网站设计与制作
  • 游戏网站页面设计做网站为什么需要购买域名
  • 哪些网站可以做ppiwordpress 不带斜杠 301
  • 在线做简历的网站江油建设局网站
  • 英文建站禁止wordpress后台加载谷歌字体
  • 丽江网站开发网站建设成本图
  • 建设旅游网站的工作方案旅游网站设计思路及设计过程