历史文章
文章平均质量分 92
历史文件。
C语言技术网-码农有道
二十二年的C/C++语言开发经验,擅长C/C++语言在数据处理和网络通信方面的应用,freecplus开源框架作者。
freecplus框架是UNIX平台下C/C++程序开发的业务层基础框架,由C语言技术网组织开发、维护。其目的是为C/C++程序员供免费的、开源的程序库。freecplus框架与C++标准库结合使用,可以极大的提高程序员的开发效率。
freecplus框架的初衷是为C/C++程序员提供功能强大、简单易用的函数和类,把程序员从纷繁复杂的C/C++底层代码中解放出来,程序员将更关注软件功能和业务逻辑的实现。
展开
-
ftp常用命令
ftp(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议族中的一员。ftp协议包括两个组成部分,其一为ftp服务器,其二为ftp客户端。 ftp客户端与服务器创建网络连接,请求登录服务器,登录成功后,就可以进行文件传输。 文件传输的请求由客户端发起,主要包括取文件和发送文件两种操作。 在li...原创 2019-08-12 08:26:28 · 40173 阅读 · 2 评论 -
C语言中调用可执行程序的方法。
在C/C++程序中,经常需要调用其它的程序来先成某项任务,例如其它的C/C++程序、操作系统命令或Shell脚本,C/C++提供了exec函数族和system函数来实现这个功能。一、exce函数族exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,...原创 2020-01-03 09:41:53 · 12205 阅读 · 2 评论 -
Linux线程同步介绍和示例
线程同步的概念 线程同步?怎么同步?一起运行?一起停止?我当年听说线程同步这个词的时候,也是一头雾水。 在人们的日常生活中,所说的锁大概有两种:一种是不允许访问;另一种是资源忙,同一时间只允许一个使用者占用,其它使用者如果要使用,必须要等待。 1)不允许访问的锁好理解,就像每户人家的锁,不允许外人进入。 2)第二种锁,例如火车上...原创 2019-08-07 13:09:37 · 1006 阅读 · 0 评论 -
Linux的多线程
线程的概念 和多进程相比,多线程是一种比较节省资源的多任务操作方式。启动一个新的进程必须分配给它独立的地址空间,每个进程都有自己的堆栈段和数据段,系统开销比较高,进行数据的传递只能通过进行间通信的方式进行。在同一个进程中,可以运行多个线程,运行于同一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享全局数据,启动一个线程所消耗的资源比启动一个进程所消耗的资源要少。线...原创 2019-08-07 13:09:29 · 1181 阅读 · 0 评论 -
Linux进程间通信的方法和示例
进程通信的概念 进程数据空间是相互独立的,不能相互访问的。但某些情况下进程之间需要互相通信,来完成系统的某项功能或交换数据。进程通信的场景 1)数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 2)共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。 ...原创 2019-08-07 13:08:56 · 1510 阅读 · 1 评论 -
Linux信号signal的介绍和示例
如何让程序在后台运行 在之前的章节中,如果要运行程序,在命令提示行下输入程序名后回车,程序被执行,然后等待程序运行完成。在程序运行的过程中,可以用Ctrl+c中止它。 在实际开发中,我们需要让程序在后台运行,不受界面的影响,也不让程序员等待,例如前几章节的socket服务端程序。 如果想让程序在后台运行,有两种方法。1、加“&”符号...原创 2019-08-07 13:08:46 · 1900 阅读 · 0 评论 -
Linux多进程的应用
并发的概念 在之前介绍socket通信的时候,socket的服务端在同一时间只能和一个客户端通信,并不是服务端有多忙,而是因为单进程的程序在同一时间只能做一件事情,不可能一边等待客户端的新连接,一边与其它的客户端进行通信。 如果把socket服务端改为多进程,在每次accept到一个客户端的连接后,生成一个子进程,让子进程负责和这个客户端通信,父进程继续acc...原创 2019-08-06 09:29:58 · 1171 阅读 · 0 评论 -
linux多进程介绍和示例
进程的概念 什么是进程?进程这个概念是针对系统而不是针对程序员的,对程序员来说,我们面对的概念是程序。当程序员敲入命令执行一个程序的时候,对系统而言,它将启动一个进程。进程就是正在内存中运行中的程序。 Linux下一个进程在内存里有三部分的数据,就是“代码段”、”堆栈段”和”数据段”。”代码段”,顾名思义,就是存放了程序代码。“堆栈段”存放的就是程序的返回...原创 2019-08-06 09:24:31 · 1327 阅读 · 0 评论 -
把socket相关函数封装成类
book241.cpp和book242.cpp程序已经有点长了,有些啰嗦了,如果还想扩展功能,或用于多进程、多线程,程序结构将非常复杂。 不管是socket通信程序的客户端还是服务端,准备工作的代码又长又难看占地方,影响了主程序的结构,必须分离出来。如何分离? 封装。C的封装方法 C语言只能把程序代码封装成函数。1、客户端的conne...原创 2019-08-06 09:19:20 · 1513 阅读 · 0 评论 -
socket通信基础知识
socket的概念 socket用于网络中一台计算机中的程序与其他计算机的程序之间需要交换数据。 socket也称作“套接字”,用于描述IP地址和端口,是一个通信链路的描述符。应用程序通常通过“套接字”向对端发出请求或者应答网络请求。 socket是连接运行在网络上的两个程序之间的通信端点。通信的两端都有socket,它是一个通道,数据在两个s...原创 2019-08-06 08:51:47 · 2757 阅读 · 0 评论 -
TCP协议简介
本章节学习的是一些概念性的知识,关于TCP协议,我的文章和别人的文章没什么区别,各位不必关心TCP的细节,走马观花的看一下就可以了。什么是TCP TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传...原创 2019-08-06 08:28:41 · 2075 阅读 · 0 评论 -
C++语言类的多态介绍和示例
多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就可能会用到多态。 C++ 多态就是当调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 示例(book236.cpp): 运行结果 在main函数中,创...原创 2019-08-06 08:24:18 · 860 阅读 · 0 评论 -
C++语言类的继承与派生介绍和示例
继承 继承是面向对象程序设计中最重要的一个概念。继承允许我们根据一个类来定义另一个类,达到了代码功能重用效果。 当创建一个类时,如果待创建的类与另一个类存在某些共同特征,程序员不需要全部重新编写成员变量和成员函数,只需指定继承另一个类即可,被继承的类称为基类或父类,新建的类称为派生类或子类。 选秀之后,被选中的超女成了宫女和王妃,宫女和王妃从超...原创 2019-08-06 08:20:25 · 1151 阅读 · 0 评论 -
C++语言运算符重载
概念 在C语言中,运算符只能用于基本数据类型,例如,可以用==判断两个整数是否相等,但不能用于判断字符串是否相等,也不能用于判断结构体,也不能用于判断类。 在C++中,运算符的重载就是把运算符的符号赋予新的含义,如果类重载了==运算符,那么就可以用==判断两个类是否相等。运算符重载 operator 是C++的一个关键字,它和运算符(如==...原创 2019-08-06 08:17:59 · 1291 阅读 · 0 评论 -
C++语言动态内存管理介绍和示例
C++动态内存 在C++程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。 但是可能存在程序的内存需求只能在运行时确定的情况。在这些情况下,程序需要动态分配内存,C ++语言将运算符new和delete合成在一起。1、特点 中通过new关键字进行动态内存申请。 C++中的动态内存分配是基于数据类型进行的。 d...原创 2019-08-06 08:14:53 · 618 阅读 · 0 评论 -
C++语言vector容器介绍和示例
之前我们在声明数组的时候,采用的是datatype array[len]的形式,数组在分配之后,不能调整大小,删除和插入数据时操作十分的繁琐,虽然可以采用链表,但是链表的操作更麻烦,我喜欢简单的方法。 与string类一样, 向量vector 同属于STL(Standard Template Library, 标准模板库)中的自定义的类, vector是一个封...原创 2019-08-06 08:12:09 · 1896 阅读 · 2 评论 -
C++语言string类介绍和示例
在C语言中,用0结尾的字符数组表示字符串,C的字符串有一个问题,就是定义后大小不能改变,存入的内容只能比数组小,不能大,如果不小心存多了,会引起内存的溢出,这个问题让程序员很郁闷。 C++的string部分的解决了这个问题,它会随存放字符的长度自动伸缩,程序员不必担心内存溢出的问题。string类还和c语言的字符串之间可以转换。string的声明 ...原创 2019-08-05 08:48:04 · 1183 阅读 · 0 评论 -
C++语言引用的介绍和示例
对于习惯使用C进行开发的程序员来说,在看到C++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中,它除了取地址,还有其它的用途,叫做引用(reference),引用是C++引入的新语言特性。引用的概念 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识...原创 2019-08-05 08:45:14 · 1349 阅读 · 0 评论 -
C++语言类的详解和示例
超女选秀的例子我们玩了很久,为了教学的需要,暂时离开美眉们,我将采用实际项目开发的例子。 在C语言基础知识中已学习过文件操作,在实际开发中,我会把文件操作封装成一个类,类的声明如下: 类的声明和成员函数的定义都是类定义的一部分,在实际开发中,我们通常将类的声明放在头文件中,而将成员函数的定义放在源文件中。类成员的访问权...原创 2019-08-05 08:42:59 · 2367 阅读 · 0 评论 -
C++语言类和对象介绍和示例
C++ 类和对象 C语言中结构体(struct)是一种构造类型,可以包含若干成员变量,可以通过结构体来定义结构体变量。 C++中的类(class)可以看成结构体的升级版,类也是一种构造类型,但是进行了一些扩展,类的成员不但可以有变量,还可以有函数,通过类定义出来的变量也有特定的称呼,叫做对象。 示例(book205.cpp) ...原创 2019-08-05 08:38:28 · 1819 阅读 · 5 评论 -
C++语言函数重载详解和示例
C++ 函数重载的概念 在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如把变量的值写入文件,变量的类型int、long、double、char,需要通过参数把变量传入函数。在C语言中不允许函数同名,程序员只能设计出四个不同名的函数,其函数原型与下面类似: bool writetofile_int(char *filenam...原创 2019-08-05 08:35:30 · 1475 阅读 · 0 评论 -
从C语言到C++语言
C++读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++ 是在C语言的基础上增加新特性。从语法上看,C语言是 C++ 的一部分,C语言代码几乎不用修改就能够以 C++ 的方式编译。 对于C和C++的关系,有很多种说法,新人很容易认为C++是C的升级版,C++比C要高级,C++高大上,C过时了,这种想法不一定对,我们先来看一个数据。 ...原创 2019-08-05 08:32:45 · 3633 阅读 · 1 评论 -
C语言makefile文件
在软件的工程中的源文件是很多的,其按照类型、功能、模块分别放在若干个目录和文件中,哪些文件需要编译,那些文件需要后编译,那些文件需要重新编译,甚至进行更复杂的功能操作,这就有了我们的系统编译的工具。 在linux和unix中,有一个强大的实用程序,叫make,可以用它来管理多模块程序的编译和链接,直至生成可执行文件。 make程序需要一个编译规则...原创 2019-08-05 08:27:51 · 2821 阅读 · 1 评论 -
C语言gdb调试
程序员写在编写程序的时候不可能是一帆风顺、一蹴而就的,gcc编译器可以发现程序代码的语法错误,但不能发现程序的业务逻辑错误,调试程序是软件开发的内容之一。调试程序的方法有很多种,例如可以用printf语句跟踪程序的运行步骤和显示变量的值,本章节介绍一个功能强大的调试工具gdb。gdb的安装 在操作系统的命令提示符下输入gdb -v回车,如果显示的是gdb的版...原创 2019-08-05 08:24:23 · 1760 阅读 · 0 评论 -
C语言编译预处理
C语言由源代码生成可执行程序的过程如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中编译预处理阶段,读取C源程序,对其中的预处理指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。 ...原创 2019-08-05 08:18:43 · 3030 阅读 · 1 评论 -
C语言系统错误信息
我们在写程序的时候需要调用C语言提供的库函数,并通过函数的返回值判断调用是否成功。其实在C语言中,还有一个全局变量errno,存放了函数调用过程中产生的错误码。 为防止和正常的返回值混淆,库函数的调用一般并不直接返回错误码,而是将错误码(是一个整数值,不同的值代表不同的含义)存入一个名为 errno 的全局变量中,errno 不同数值所代表的错误消息定义在 &l...原创 2019-08-05 08:09:49 · 5484 阅读 · 0 评论 -
C语言目录文件操作补充
本章节补充一些目录和文件操作的更多知识,因为这些知识涉及到时间操作,所以放在时间操作之后的章节中介绍。access库函数 access函数用于判断当前操作系统用户对文件或目录的存取权限。 包含头文件: #include <unistd.h> 函数声明: int access(const...原创 2019-08-04 08:20:15 · 1241 阅读 · 4 评论 -
C语言时间操作
在实际开发中,对日期和时间的操作需求非常多,例如程序启动和退出的时间,程序执行任务的时间,数据生成的时间,数据处理的各环节的时间等,无处不在。 在学习时间之前,请把操作系统的时区设置为中国北京或上海时间。time_t别名 在C语言中,用time_t来表示时间数据类型,它是一个long(长整数)类型的别名,在time.h文件中定义,表示一个日历...原创 2019-08-04 08:17:23 · 15619 阅读 · 1 评论 -
C语言目录操作
目录的操作不论是在嵌入式产品还是应用软件编程都是必不可少的,不同的开发语言可能略有不同,本章节主要是讨论在Linux平台下对目录的一系列操作,以我的个人经验,创建目录和列出目录中的文件这两个功能用得最多。获取当前目录 在系统命令行下我们可以直接输入命令pwd 来获取当前的工作目录,但是你知道这个命令是怎么执行的吗?它是由系统通过 shell 程序来解释执...原创 2019-08-04 08:14:02 · 6401 阅读 · 3 评论 -
C语言文件操作
文件是数据的集合,这个数据集的名称就是文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是存放在外部介质(如磁盘等)上的,在使用时才调入内存中来。从用户的角度看,Linux系统的文件分为普通文件和设备文件两种。 普通文件是指存放在磁盘或其它外部介质上的一个有序数据集,可以是源文件、目标文件、可...原创 2019-08-04 08:07:14 · 8660 阅读 · 0 评论 -
C语言动态内存管理
在C语言中,编写程序的时候不能确定内存变量应该定义为多大,程序员希望在程序运行的时候根据数据量的大小向系统动态获得内存空间。所谓动态内存管理,就是指在程序执行的过程中动态地申请和回收内存空间。动态内存管理不像变量和数组那样在程序编写时预先分配内存空间,而是根据程序的需要即时分配,而且分配的内存大小就是程序要求的大小。 C语言允许程序动态申请内存,用于存放一些数据...原创 2019-08-04 08:00:01 · 1110 阅读 · 0 评论 -
C语言main函数的参数
在我们之前编写的C程序中,main函数是没有参数的,但是在实际开发中,main函数一般都需要参数,没有参数的情况极少。 main函数的参数是从命令提示符下执行程序的时候传入,例如ls 命令。 在以上示例中ls命令有两个参数,-l和book1*。main函数的参数 main函数有三个参数,argc、argv和en...原创 2019-08-04 07:56:56 · 19853 阅读 · 2 评论 -
C语言格式化输出
格式化输出 格式化输出的函数有printf、sprintf和snprintf等,功能略有不同,使用方法大同小异,本章节我们以printf为例。 对于 printf 函数,相信大家并不陌生。之所以称它为格式化输出函数,该函数的声名如下: int printf(const char *format, ...); 大家看...原创 2019-08-04 07:52:16 · 13196 阅读 · 3 评论 -
C语言结构体
结构体的概念 前面的教程中我们讲解了变量和数组(array),变量是单独的一个一个的定义,数组是一组具有相同类型的变量的集合。但在实际的工作和生活中,我们往往还需要一组类型不同的数据,例如超女基本信息,姓名为字符串,身高和年龄为整数,身材和颜值为字符串,因为各种信息的数据类型不同,不能用一个数组来存放。 如果某对象的信息有100个属性,并且每个属性的数据类型不...原创 2019-08-04 07:47:06 · 2158 阅读 · 3 评论 -
C语言数据类型转换
计算机进行算术运算时,要求各操作数的类型具有相同的大小(存储位数)及存储方式,不能将 char 型( 1 字节)数据与 int 型( 2、4或8字节)数据直接参与运算;由于存储方式的不同,也不能将 int 型数据与 double 型数据直接参与运算。 然而,由于 C 语言的灵活性,在一个表达式或一条语句中,允许不同类型的数据混合运算。 C 语言的...原创 2019-08-04 07:42:28 · 1241 阅读 · 0 评论 -
C语言字符串
字符串的概念 我们可以把字符串储存在char类型的数组中,如果char类型的数组末尾包含一个表示字符串末尾的空字符\0,则该数组中的内容就构成了一个字符串。 因为字符串需要用\0结尾,所以在定义字符串的时候,字符数组的长度要预留多一个字节用来存放\0,\0就是数字0。 char strname[21]; // ...原创 2019-08-04 07:39:48 · 3577 阅读 · 1 评论 -
C语言浮点数
浮点数的概念 浮点数也称小数或实数。例如,0.0、75.0、4.023、0.27、-937.198 都是合法的小数。这是常见的小数的表现形式,称为十进制形式。 C语言中采用float和double关键字来定义小数,float称为单精度浮点型,double称为双精度浮点型,long double更长的双精度浮点型。 在任何区间内(如1.0 到 2...原创 2019-08-03 20:23:07 · 42218 阅读 · 6 评论 -
C语言字符
在实际开发中,程序员很少用单个字符来表示一个完整的数据,字符的意义主要作为数组的时候可以形成一个字符串。在本章节中,我们更关心字符与整数之间的关系和ASCII码的相关知识。 字符类型char,只能用单引号' '来包围,不能用双引号" "包围。而字符串只能用双引号" "包围,不能用单引号' '包围。输出字符使用 %c,输出字符串使用 %s。ASCII码表...原创 2019-08-03 20:17:35 · 2083 阅读 · 0 评论 -
C语言整数
整数的概念 在之前的章节中,我们已经用过整数了,也定义过整型变量,好像没什么好讲的,整数就是整数。 整数是我们生活中常用的数据类型,也是编程中常用的一种数据,C语言使用int关键字来定义整数变量(int 是 integer 的简写)。 在定义变量的时候,可以加signed、unsigned、short和long四种修饰符。 s...原创 2019-08-03 20:10:15 · 3176 阅读 · 0 评论 -
C语言指针
变量的地址 我们已经知道,内存变量简称变量,在C语言中,每定义一个变量,系统就会给变量分配一块内存,而内存是有地址的。如果把计算机的内存区域比喻成一个大宾馆,每块内存的地址就像宾馆房间的编号。 C语言采用符号&获取变量的地址。请看下面的示例。 示例(book50.c) 运行结果 ...原创 2019-08-03 20:04:03 · 2008 阅读 · 3 评论