C/C++文件IO操作open(), close(), read(), write()函数详解
函数介绍
open()函数
功能描述:
用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等参数。
头文件依赖:
#include<sys/types.h>, #include <sys/stat.h>, #include <fcntl.h>
函数原型:
int open(const char *pathname, int flags, int perms)
参数:
pathname:被打开的文件名(可包括路径名,如(dev/ttyS0))
flags:文件打开方式:
O_RDONLY:以只读方式打开文件
O_WRONLY:以只写方式打开文件
O_RDWR:以读写方式打开文件
O_CREAT:如果改文件不存在,就创建一个新的文件,并用第三个参数为其设置权限
O_EXCL:如果使用O_CREAT时文件存在,则返回错误消息。这一参数可测试文件是否存在。此时open是原子操作,防止多个进程同时创建同一个文件
O_NOCTTY:使用本参数时,若文件为终端,那么该终端不会成为调用open()的那个进程的控制 ...
C++11变长参数的宏定义以及' __VA_ARGS__'在Log输出中的应用
C自带的常用的“std::cout”和“printf()”之类作为log输出显然不是一个好的方法,笔者在学习《(C11)深入理解C11:C2011新特性解析与应用》的教程中,抽出如下的代码,在轻量级调试中是一个不错的选择。
在 C99 标准中,程序员可以使用变长参数的宏定义。变长参数的宏定义是指在宏定义中 参数列表的最后一个参数为省略号,而预定义宏 __VA_ARGS__ 则可以在宏定义的实现部分替换省略号所代表的字符串。比如:
#define PR(...) printf(__VA_ARGS__)
就可以定义一个 printf 的别名 PR。事实上,变长参数宏与 printf 是一对好搭档。我们可以看如下代码清单所示的一个简单的变长参数宏的应用。
#include <stdio.h>
#define LOG(...) {\
fprintf(stderr,"%s: Line %d:\t", __FILE__, __LINE__);\
fprintf(stderr, __VA_ARGS__);\
fprintf(stderr,&qu ...
C++11 主要的新语言特性(中英文对照)
如果谁说 C11 只是对 C 语言做了大幅度的改进,那么他很可能就错过了 C11 精 彩的地方。事实上,了解 C11 之后,读者只需要看一眼代码,就可以说出代码究竟是 C98/03 的,还是 C11 的。C11 为程序员创造了很多更有效、更便捷的代码编写方式,程序员可 以用简短的代码来完成 C98/03 中同样的功能,简单到你惊呼“天哪,怎么能这么简单”。 从一些简单的数据统计上看,比起 C98/03,C11 大大缩短了代码编写量,依情况最多可 以将代码缩短 30% ~ 80%。 那么 C11 相对于 C98/03 有哪些显著的增强呢?事实上,这包括以下几点:
❑通过内存模型、线程、原子操作等来支持本地并行编程(Native Concurrency)。
❑通过统一初始化表达式、auto、declytype、移动语义等来统一对泛型编程的支持。
❑通过 constexpr、POD(概念)等更好地支持系统编程。
❑通过内联命名空间、继承构造函数和右值引用等,以更好地支持库的构建。
下表列出了 C11 批准通过的语言特性。这是一张相当长的表, 而且一个个陌生的词汇足以让新手不知所措。不过现 ...
javascript利用jquery 动态创建 DIV或子DIV
在做音乐列表的时候碰到了这个需求,于是上网搜索相关解决方案,结果是千篇一律,几乎都是错的(报错“parentdiv.addClass is not a function(…)”)。后来通过查找资料解决了相关问题。
首先要记得引入jQuery的文件。
方法一:
var creatediv= function(){
var parentdiv=$('<div></div>'); //创建一个父div
parentdiv.attr('id','parent'); //给父div设置id
parentdiv.addClass('parentdiv'); //添加css样式
var childdiv=$('<div></div>'); //创建一个子div
childdiv.attr('id','child'); //给子div设置id
childdiv.addClass('childdiv'); //添加css ...
Ubuntu 16.04添加全新硬盘流程步骤
操作环境:
系统:Ubuntu 16.04
硬件:硬盘 1T(全新未使用过的WD蓝盘)
操作过程:
1.拆开电脑机箱,安装硬盘,具体操作省略。
2.开机查看系统硬盘分区情况:
命令:
# sudo fdisk -l
得到如上图:可以知道第二块硬盘:/dev/sdb
3.格式化硬盘
命令:
# sudo mkfs.ext4 /dev/sdb
还有一种方法是通过Ubuntu系统中搜索框搜索disk软件查看硬盘情况,并通过该软件图形化进行格式化操作
鼠标点击两个齿轮的位置,第一选项就是格式化硬盘,或者使用crtl+shift+F进行格式化操作,可以个格式化硬盘设置一个标签,如:code
4.查看硬盘分区的UUID
命令:
# sudo blkid
从上图可以清楚的看到,该硬盘已经格式化为ext4,标签为code
5.在已有的user目录下新建一个挂在点
命令:
# mkdir xxx
例如:我自己在已有的目录下创建一个code目录挂载新的硬盘分区,如:
# mkdir /home/jason/code ...
c++判断某个字串是否有关键字
“c++判断某个字串是否有关键字”代码示例:
1234567891011std::string& aJSONData="tsddsgsgsgsgsgsdgsgsg";std::string json_data = aJSONData.c_str(); std::string::size_type idx_exit_sdl = json_data.find("send_to_exit_sdl_hmi"); if(idx_exit_sdl != std::string::npos) { // Success!! std::cout<<"Start to exit sdl app!!"<<std::endl; send_exit_sdl_message_to_ivi(); } else { // Fail!!!!! }
Koenig Editor - Beta Release(Koenig Editor中文快速入门教程)
translated from 《Koenig Editor - Beta Release》
“Koenig”是Ghost未来编辑的代号。您可能在我们的Ghost 1.0公告159中第一次听说过它,现在随着Ghost 1.23.0的发布,它终于可以开始测试了。
我们为什么要找一个新的编辑器?1.0版的文章总结得很好:
改进Ghost的Markdown编辑器一直是我们优先考虑的事情,但很长一段时间以来,我们一直希望做得更多。现代出版物不只是基于文本,它们还包括从照片到视频的各种动态元素、详细的图表和丰富的嵌入。我们想要构建一些全新的东西,它将支持所有这些用例,并且在未来可以为新类型的内容进行扩展。
这只是我们对编辑器未来计划的皮毛,但目前我们关注的是基础——一个非常好的编辑体验,它提供了比单独标记更大的灵活性,同时使您的内容更接近最终输出。
要总结Koenig的基本概念,最好将其视为两种类型的内容:富文本和卡片。富文本包括所有文本内容,如标题、段落、列表和一般格式。在丰富的文本中穿插着我们所说的“卡片”。卡片表示非文本内容(图像、嵌入、分隔符等)或其他格式(如代码、标记或HTML) ...
如何在Windows10上安装Youtube-DL
前言
本文由郭鹏真于2020/10/31翻译自Dan Clowry《How to Install Youtube-DL on Windows》,英语水平比较好的可以直接看原文。
由于跨境电商运营的过程中,需要剪辑大量的视频用于广告推广,但是市面上搜到的视频下载软件总是难以满足我的需求,于是作为程序猿的我就找到了这种Youtube-DL,非常好用,可以下载几乎所有的视频网站视频,也可以用指令剪辑成自己所需要的视频片段。
注:这些其他网站包括但不限于如下常用网站:BaiduVideo百度视频、BiliBili、BBC、CCTV央视网、CNN、iqiyi爱奇艺、kuwo酷我音乐、MSN、netease网易云音乐、qqmusicQQ音乐、xiami虾米音乐、ximalaya喜马拉雅FM、Yahoo、youku优酷、youtube等。
原文
Youtube-DL是一个很棒的小项目,通过它,你可以从互联网上几乎每个主流的视频网站下载视频。本教程将向您展示如何在Windows上下载、安装、配置和使用Youtube-DL。
预先准备
基本了解如何打开和使用Windows下的命 ...
string中c_str()、data()、copy(p,n)函数的用法及区别
C中没有string,所以标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。
1. c_str():
生成一个const char*指针常量,指向以空字符终止的数组的首地址,该指针保证指向一个 size() + 1 长度的空间,而且最后一个字符肯定是 “\0 ”;
注意:一定要使用strcpy()函数 等来操作方法cstr()返回的指针。
①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用现转换,要么把它的数据复制到用户自己可以管理的内存中。
例如:
123456const char* c;string s="1234";c = s.c_str(); cout<<c<<endl; //输出:1234s="abcd";cout<<c<<endl; //输出:abcd
上面如果继续用c指针的话,导致的错误 ...
C++传参时 const string& 相对 const string 有哪些优势?
C中值传递和引用传递的方式。
C的值传递(pass-by-value),是从调用的地方把值复制一遍传给函数,这样做有两个问题,第一,需要将实参拷贝到形参处,形成实参的副本,有时间和空间的开销,若实参为结构体或者类的话,那么时空开销将会非常大;第二、函数中对实参副本的修改并不会影响到函数调用位置实参的值。
C的引用传递(pass-by-reference),一方面,参数传递的是把实参的地址拷贝到形参,这样形参和实参对应的是同一块儿内存地址,那么对形参的修改自然会反映到实参上;另一方面,C中指针或者引用只占4字节,所以时空开销也能接受。
好了,我们现在来看一下const string & parameter 和 const string parameter的比较
参数声明中const,const string parameter表明复制出来的副本(也就是形参)你不会修改。const string & parameter表明你不会对调用函数的实参进行修改
另一方面:
因为 C++ 规定引用不能为空,所以一个函数传进来引用你就可以直接用,而传进来指针你还需要判断指针是否为空
如 ...