size_t

C++的一些笔记

泪湿孤枕 提交于 2019-12-27 16:53:46
1.尽量不要用include<iostream.h> 应该用include<iostream> 2.使用int main(void)格式 3.wchar_t 宽字节字符 2个字节 或者4个字节 4.size_t 在 C 语言中就有了。 它是一种 整型 类型,里面保存的是一个整数,就像 int, long 那样。这种整数用来记录一个大小(size)。size_t 的全称应该是 size type,就是说 一种用来记录大小的数据类型。 通常我们用 sizeof(XXX) 操作,这个操作所得到的结果就是 size_t 类型。 因为 size_t 类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为 int 并赋值给 int 类型的变量。 类似的还有 wchar_t, ptrdiff_t。 wchar_t 就是 wide char type, 一种用来记录一个宽字符的数据类型 。 ptrdiff_t 就是 pointer difference type, 一种用来记录两个指针之间的距离的数据类型 。 通常,size_t 和 ptrdiff_t 都是用 typedef 来实现的。 5.判断语句最好把右值写在前面 if (NULL == a) 因为有可能笔误写成if (NULL = a)这样就可以编译不通过提早发现问题 6.整数常量也可以带一个后缀,后缀是 U 和 L 的组合

C-fopen,fwrite,fread,fseek,fgets,popen,access笔记

丶灬走出姿态 提交于 2019-12-27 14:58:36
FILE * fopen(const char * path,const char * mode); 所需库: <stdio.h> 返回值 FILE是C语言定义的标准数据结构,如果open()失败,则返回NULL path 路径 mode 打开模式,包括有以下几种 r 以只读方式打开文件,该文件必须存在。 r+ 以读/写方式打开文件,该文件必须存在。 rb+ 以读/写方式打开一个二进制文件,只允许读/写数据。 rt+ 以读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则长度清为 0,即该文件内容消失,若不存在则创建该文件。 w+ 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF 符保留)。 a+ 以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的 EOF 符不保留)。 wb 以只写方式打开或新建一个二进制文件,只允许写数据。 wb+ 以读/写方式打开或建立一个二进制文件,允许读和写。 wt+ 以读/写方式打开或建立一个文本文件,允许读写。 at+ 以读/写方式打开一个文本文件,允许读或在文本末追加数据

Unix环境高级编程学习笔记(三)

穿精又带淫゛_ 提交于 2019-12-22 07:12:14
第五章 标准IO库 1、流和FILE对象: 有两个函数可以改变流的定向:freopen函数可以清除一个流的定向;fwide函数可以设置流的定向 #include<stdio.h> #include<wchar.h> int fwide(FILE *fp, int mode); //若流是宽定向的则返回正值,若流是字节定向的则返回值负值,未定向返回0 若mode为负,字节定向;mode为正,宽定向;mode为0,不定向。 fwide并不改变已定向流的定向,无出错返回。 当打开一个流时,标准IO函数fopen返回一个指向FILE对象的指针,该对象是一个结构,包含了标准IO库为管理该流所需的所有信息,包括:文件描述符,该流的缓冲区指针,缓冲区长度等等。我们称FILE*对象为文件指针。 2、标准输入、标准输出、标准出错:stdin、stdout、stderr,定义在<stdio.h>中,注意这三个对象是流。 3、缓冲:全缓冲、行缓冲、不带缓冲 我可以调用以下两个函数更改缓冲类型:#include<stdio.h> void setbuf(FILE* restrict fp, char *restrict buf); int setvbuf(FILE* restrict fp, char* restrict buf, int mode, size_t size); 成功返回0,否则返回非0值

Linux系统下SFTP上传下载实现

╄→尐↘猪︶ㄣ 提交于 2019-12-17 23:24:58
1.功能介绍 1.1 sftp(安全文件传送协议),从字面意思看,就是我们常用的文件上传下载协议,实现文件的上传下载功能。 2.如实使用sftp 2.1 网上也有很多封装好的库,也很好用,可以跨平台;今天我分享的是基于Linux系统编程的sftp,不需要下载任何库,拿去直接可用,也写了相应的测试程序可参考。 3.SFTP代码 # include <stdio.h> # include <stdlib.h> # include <curl/curl.h> //sftp使用Linux系统里的头文件 # undef DISABLE_SSH_AGENT size_t read_callback ( void * ptr , size_t size , size_t nmemb , void * stream ) //上传回调函数 { curl_off_t nread ; size_t retcode = fread ( ptr , size , nmemb , ( FILE * ) ( stream ) ) ; nread = ( curl_off_t ) retcode ; return retcode ; } int SftpUpload ( const char * pUrlKey , const char * pPathFile , const char * pSftpUrl )

[APUE]标准I/O库

独自空忆成欢 提交于 2019-12-16 17:26:12
   一、流和FILE对象   标准I/O库对应文件的操作是围绕流(stream)进行的。当用标准I/O库打开或创建文件时,便使一个流与一个文件相关联。标准I/O库的函数对于文件的描述是基于FILE对象指针的,该对象是一个结构体,包含了I/O库管理流所需要的全部信息:用于实际I/O的文件描述符、指向流缓存的指针、缓存长度、当前在缓存中的字符数、出错标志等。   在标准I/O中,一个打开的文件称为流(stream),流可以用于读(输入流)、写(输出流)或者是读写(输入输出流)。每个进程在启动后就会打开三个流,与打开的三个文件相对应:stdin代表标准输入流,stdout代表标准输出流,stderr代表标准错误输出流,它们都是(FILE*)型的指针。   二、缓存   有缓存就会有延迟,即输出设备上的内容和缓存中的内容很可能不一样。可以调用fflush刷新缓存。   有多种缓存类型,可以调用下面的API来更改默认缓存类型:setbuf, setvbuf。   setvbuf可以精确的说明缓存的类型;fclose关闭流时也会刷新流。   当一个进程正常终止时(直接调用exit或从main函数返回),则所有带未写缓存数据的标准I/O流都会被刷新,所有打开的标准I/O流都会被关闭。   三、与Unix I/O的区别   UNIX I/O的函数都是针对文件描述符的,而标准I

Unix标准IO库

拥有回忆 提交于 2019-12-16 16:04:55
  在Unix中,当我们使用标准IO库来进行文件操作时,我们就对该文件创建了一个文件流。每一个文件流都具有缓冲区,可以用来缓存从文间中读取(写入)的内容,缓冲可以分为三种方式: 全缓冲(fully buffered),当缓冲区全部填满时才调用系统函数执行读写操作。 行缓冲(line buffered),当缓冲区内读取到换行符,或缓冲区被写满时才调用系统函数执行读写操作。 无缓冲(unbuffered),没有缓冲区,每次根据要求调用系统函数进行单个字符的连续读取操作。   可以通过调用fflush函数对指定文件流缓冲区进行强制刷新,调用系统函数执行相应读写操作,并清空缓冲区中内容。setbuf函数和setvbuf函数可以修改指定文件流的缓冲方式及缓冲区位置,其函数原型为: void setbuff ( FILE *fp, char *buf); void setvbuf ( FILE *fp, char *buf, int mode, size_t size);   参数fp为指定文件流,buf为指定缓冲区,buf的长度必须与BUFSIZE(宏定义于stdio.h文件)保持一致。在setbuff函数中,当buf为NULL时,文件流缓冲方式将调整为无缓冲(unbuffered);当buf不为NULL时,文件流缓冲方式将调整为全缓冲或行缓冲。在函数setvbuff中

什么是Cython?来这里包你秒懂

蓝咒 提交于 2019-12-15 00:28:39
​我一直非常喜欢 Python。当人们提到 Python 的时候,经常会说到下面两个优点: 写起来方便 容易调用 C/C++ 的库 然而实际上,第一点是以巨慢的执行速度为代价的,而第二点也需要库本身按照 Python 的规范使用 Python API、导出相应的符号。 在天壤实习的时候,跟 Cython 打了不少交道,觉得这个工具虽然 Bug 多多,写的时候也有些用户体验不好的地方,但已经能极大提高速度和方便调用 C/C++,还是非常不错的。这里就给大家简单介绍一下 Cython(注意区别于 CPython)。Cython 可以让我们方便地: 用 Python 的语法混合编写 Python 和 C/C++ 代码,提升 Python 速度 调用 C/C++ 代码 例子:矩阵乘法 假设我们现在正在编写一个很简单的矩阵乘法代码,其中矩阵是保存在 numpy.ndarray 中。Python 代码可以这么写: dot_python.py import numpy as np def naive_dot(a, b): if a.shape[1] != b.shape[0]: raise ValueError(‘shape not matched’) n, p, m = a.shape[0], a.shape[1], b.shape[1] c = np.zeros((n, m), dtype

C++动态内存:(二)重载new和delete

别等时光非礼了梦想. 提交于 2019-12-13 14:36:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、重载的原因 用new创建动态对象时会发生两件事:(1)使用operatoe new()为对象分配内存(经常是调用malloc)(2)调用构造函数来初始化内存。相对应的调用delete运算符会(1)首先调用析构函数(2)调用operator delete()释放内存(经常是调用free)。我们无法控制构造函数和析构函数的调用,是由编译器调用的。但可以改变内存分配函数operator new()和operator delete()。链接:C++中的new/new[],delete/delete[] 使用了new和delete的内存分配系统是为了通用目的而设计的,但是在特殊的情形下并不能满足需要。最常见的改变分配系统的原因常常是出于效率考虑: (1)增加分配和归还的速度。创建和销毁一个特定的类的非常多的对象,以至于这个运算成了速度的瓶颈。 (2)堆碎片。分配不同大小的内存会在堆上产生很多碎片,以至于虽然内存可能还有,但由于都是碎片,找不到足够大的内存块来满足需要。通过为特定的类创建自己的内存分配器,可以确保这种情况不会发生。例如在嵌入式和实时系统里,程序可能必须在有限资源情况下运行很长时间,这样的系统就要求内存花费相同的时间且不允许出现堆内存耗尽或者出现很多碎片。 (3)检测运用上的错误。例如:new所得的内存

c++之STL总结

浪尽此生 提交于 2019-12-11 00:59:23
c++中的STL(Stand Template Library)提供了最基本的数据结构和算法,功能十分强大。主要分为 容器 (数组,队列,链表,栈,集合等等), 迭代器 (一种对象,用来遍历容器中的元素)和常见算法(排序,反转等) 文章目录 容器 字符串 vector list deque stack multiset&set multimap&map 容器 字符串 包含文件:c++头文件中: #include<string> 常用方法: 初始化: string str:生成空字符串 string s ( str ) :生成字符串为str的复制品 string s ( str , strbegin , strlen ) :将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值 string s ( cstr , char_len ) :以C_string类型cstr的前char_len个字符串作为字符串s的初值 string s ( num , c ) :生成num个c字符的字符串 string s ( str , stridx ) :将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值 直接用另一个字符串赋值 如str2 . assign ( str1 ) ; 即用str1给str2赋值 . 用另一个字符串的一个子串赋值 如str3

container_of的函数用法总结

老子叫甜甜 提交于 2019-12-10 04:53:47
首先看看函数的原型: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) 其原理是利用,结构体中的一个成员变量的地址获得该结构体的首地址。 其中: #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 注: typeof 关键字是用来定义变量数据类型的。 如: 把y定义成x指向的数据类型: typeof(*x) y; 解析如下: const typeof ( ( ( type * ) 0 ) -> member) * __mptr =(ptr) ; //定义 一个(type *)0->member 类型的指针变量 __mptr 并且将 ptr 赋给 __mptr ;也就是临时存放 ptr 的地址(这里的还有一个作用,可以检查ptr的类型是否与member相同)。 (type *)( ( char * ) __mptr - offsetof ( type, member ) ) ;//该结构体成员变量的地址减去该结构体成员变量地址的偏移量