
C
文章平均质量分 92
newyoung
学无止境.
展开
-
C语言函数 传参以及指针与引用小结
C语言中函数参数传递的三种方式(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。(2)传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。(3)传引用,实际是通过指针来实现的,能达到使用的效果如传址...原创 2019-12-22 23:59:57 · 2831 阅读 · 2 评论 -
指针的初始化总结
1. 字符指针的初始化在c语言中 "string"保存的就是首个字符所在的地址 所以可以把 字符串常量"string" 赋值给指针 char *p; p="string" 但不能把字符串常量直接赋给数组,需要用到 strcpy。 但可以对数组初始化为字符串,也就是字符数组。如 char str[] = "string"; 两种初始化的区别:char * p=转载 2013-10-09 14:08:48 · 1080 阅读 · 0 评论 -
结构体指针的初始化
过了几天这位同事说他试了一下,结构体中的成员指针不经过初始化是可以用(左子树和右子树指针)那时在忙着整理文档,没在意今天抽空调了一下,结论是,还是需要初始化的。而且,不写代码你是不知道原因的(也许是对着电脑久了IQ和记性严重下跌吧)测试代码如下:#include #include #include struct student{ char *name;转载 2013-10-09 15:10:51 · 4485 阅读 · 0 评论 -
socket中的select
使用select函数可以以非阻塞的方式和多个socket通信。程序只是演示select函数的使用,功能非常简单,即使某个连接关闭以后也不会修改当前连接数,连接数达到最大值后会终止程序。1. 程序使用了一个数组fd_A,通信开始后把需要通信的多个socket描述符都放入此数组。2. 首先生成一个叫sock_fd的socket描述符,用于监听端口。3. 将sock_fd和数原创 2013-10-09 17:45:48 · 656 阅读 · 0 评论 -
linux消息队列
下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux用宏转载 2014-02-20 21:19:51 · 565 阅读 · 0 评论 -
linux 服务器socket的五种模型
一、五种I/O模型1、阻塞I/O我们在前面所说的I/O模型都是阻塞I/O,即调用recv系统调用,如果没有数据则阻塞等待,当数据到来则将数据从内核空间(套接口缓冲区)拷贝到用户空间(recv函数提供的buf),然后recv返回,进行数据处理。2、非阻塞I/O我们可以使用 fcntl(fd, F_SETFL, flag |转载 2014-03-28 00:24:04 · 624 阅读 · 0 评论 -
epoll
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epol转载 2014-05-01 19:53:25 · 521 阅读 · 0 评论 -
epoll
Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。Linux 2.6内核中有提高网络I/O性能的新方法,即epoll 。1、为什么select落后 首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内转载 2014-05-01 19:49:17 · 521 阅读 · 0 评论 -
linux下的core 文件
浅析Linux下core文件当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。最常出 现的,几乎所有C程序员都出现过的错误就是“段错误”了。也是最难查出问题原因的一个错误。下面我们就针对“段错误”来分析core文件的产生、以及我们 如何利用core文件找到出现崩溃的地方。何谓core文件当一个程序崩溃时,在进程当前工作目录转载 2014-05-07 23:28:06 · 618 阅读 · 0 评论 -
嵌入式环境下的gdb调试方法
采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。在此我们还不能直接采用linux发行版自带的gdb,需要交叉编译gdb和gdbserver。一.前言嵌入式Linux系统中,应用开发过程中,很多情况下,用户需要对一个应用程序进行反复调试转载 2014-05-07 23:40:19 · 2357 阅读 · 0 评论 -
gdb+gdbserver的方式进行ARM程序调试
gdb+gdbserver的方式进行ARM程序调试Sailor_forever Sailing_9806@163.com 转载请注明http://blog.youkuaiyun.com/sailor_8318/archive/2008/04/16/2295583.aspx 【摘要】:本文首先介绍了gdb+gdbserver相关的概念,然后介绍了其下载、编译、安装等过程;接着介绍了利用gdb+转载 2014-05-07 23:45:01 · 888 阅读 · 0 评论 -
QT 容器
[+]QT不仅支持C++的STL模板库,同时自己也定义了一套容器类和与之操作的算法类,使用QT定义的这一套库,可以使在各个平台的表现相同。QT的这些容器被设计为更轻便,更安全和更容易使用。容器类是隐含共享(implicitly)的,可重入(reentrant)的和线程安全的。为容器遍历提供了两种迭代器(java-style,STL-style),并且QT提供了foreach关键字,更加方便元素转载 2015-02-13 16:37:17 · 677 阅读 · 0 评论 -
一些静态查找算法
查找表(Search table)是由同一类型的数据元素(或记录)构成的集合。关键字(key)是数据元素中某个数据项的值,又称为键值,用它可以表示一个数据元素,也可以标识一个记录的数据项(字段),称之为关键码。若此关键字可以唯一地标识一个记录,则称此关键字为主关键字(primary key)。而对于那些可以识别多个数据元素(或记录)的关键字,称为次关键字(Secondary Key),次关键字也可转载 2015-04-02 11:53:57 · 606 阅读 · 0 评论 -
linux下面实现检测按键(Linux中kbhit()函数的实现)
在linux下面实现检测按键(Linux中kbhit()函数的实现) #include #include #include #include #include #include static struct termios initial_settings, new_settings;static int peek_character = -1;转载 2015-11-30 23:31:22 · 2830 阅读 · 0 评论 -
检测按键(Linux中kbhit()函数的实现)
我转载的网址来源http://hi.baidu.com/weihuili5/blog/item/3c9d1a012a84a30d738da527.html编写过MS-DOS程序的人通常都会查找Linux下等同于kbhit的函数,这个函数会检测一个按键是否被按下而并不实际的读取。不幸的是他们并没有找到这样的函数,因为并没有直接等同的函数。Unix程序员并不会注意到这个遗漏,因为Unix的编程方式转载 2015-11-30 23:28:51 · 3232 阅读 · 0 评论 -
基于UDP协议的网络程序 (学习)
下图是典型的UDP客户端/服务器通讯过程(该图出自[UNPv13e])。图 37.3. UDP通讯流程以下是简单的UDP服务器和客户端程序。/* server.c */#include #include #include #include "wrap.h"#define MAXLINE 80#define SERV_PORT 8000int m翻译 2013-09-18 15:57:51 · 697 阅读 · 0 评论 -
SELECT的学习以及在socket中的应用
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等 待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。 可是使用Select就可以完成非阻转载 2013-09-18 11:58:22 · 632 阅读 · 0 评论 -
C++ 中的 Virtual详解
Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如下面例子中的函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函原创 2013-05-05 22:15:18 · 566 阅读 · 0 评论 -
htons(), htonl(), ntohs(), ntohl()的区别和含义
将多字节整数类型的数据,从主机的字节顺序转化为网络字节顺序原型:#include uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort); 描述:不翻译 2013-05-19 22:07:31 · 795 阅读 · 0 评论 -
Linux下 fcntl 函数用法说明
Linux下 fcntl 函数用法说明功能描述:根据文件描述词来操作文件的特性。 文件控制函数 fcntl -- file controlLIBRARY Standard C Library (libc, -lc)SYNOPSIS #include ; int fcntl(int fd转载 2013-05-23 21:22:52 · 725 阅读 · 0 评论 -
设置时钟
功能说明:显示与设定硬件时钟。 语 法:hwclock [--adjust][--debug][--directisa][--hctosys][--show][--systohc][--test][--utc][--version][--set --date=] 补充说明:在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是转载 2013-05-27 16:54:49 · 767 阅读 · 0 评论 -
一个网络资深者发起的思考
陈硕 (giantchen AT gmail)blog.youkuaiyun.com/Solstice前几天我在新浪微博上出了两道有关 TCP 的思考题,引发了一场讨论 http://weibo.com/1701018393/eCuxDrta0Nn 。第一道初级题目是:有一台机器,它有一个 IP,上面运行了一个 TCP 服务程序,程序只侦听一个端口,问:从理论上讲(只考虑 TC转载 2013-06-05 22:53:03 · 650 阅读 · 0 评论 -
stl的使用
STL中list的使用:STL中的list就是一双向链表,可高效地进行插入删除元素。现总结一下它的操作。文中所用到两个list对象c1,c2分别有元素c1(10,20,30) c2(40,50,60)。还有一个list::iterator citer用来指向c1或c2元素。list对象的声明构造():A. listc0; //空链表B转载 2013-06-05 22:58:10 · 526 阅读 · 0 评论 -
c++中的string用法(二)
basic_string::compare如果所比较的两个string 相等,则返回0; 操作string 大于参数string,返回正数;操作string 小于参数string,返回负数。(1)比较操作string 与_Str 或C-string_Ptrint compare( const basic_string& _Str ) const;int compare( con转载 2013-06-05 22:58:59 · 690 阅读 · 0 评论 -
C++ string用法(三)
basic_string::max_size返回string 能放的最大元素个数。(不同于capacity)size_type max_size( ) const;basic_string ::size_type cap, max;cap = s.capacity ( );max = s.max_size ( ); // max=4294967294.basic_strin转载 2013-06-05 22:59:49 · 699 阅读 · 0 评论 -
ubantu下vi文本后出现不正常的情况.
Ubuntu下编辑一些文件,这就涉及到了vi这个编辑器了。在Ubuntu下,初始使用vi的时候有点问题,就是在编辑模式下使用方向键的时候,并不会使光标移动,而是在命令行中出现[A [B [C [D之类的字母,而且编辑错误的话,就连平时关于的退格键(Backspace键)都使用不了,只能用Delete来删除。针对这个问题,网上的答案有很多,例如是安装完整版的vim啊,编辑/etc/vim/vimrc原创 2013-06-05 22:18:24 · 1174 阅读 · 0 评论 -
Linux TCP server系列(4)-浅谈listen与大并发TCP连接
背景: 服务器在调用listen和accept后,就会阻塞在accept函数上,accpet函数返回后循环调用accept函数等待客户的TCP连接。如果这时候又大量的用户并发发起connect连接,那么在listen有队列上限(最大可接受TCP的连接数)的情况下,有多少个connect会成功了。试验证明,当连接数远远高于listen的可连接数上限时,客户端的大部分TCP请求会被抛弃,只有当转载 2013-06-05 22:47:05 · 1874 阅读 · 0 评论 -
c++中的string用法(一)
basic_string::append向string 的后面加字符或字符串。(比+=, push_back 更灵活)(1)向string 的后面加C-stringbasic_string& append( const value_type* _Ptr );string s ( "Hello " ); // s=”Hello ”const char *c = "Out Ther转载 2013-06-05 22:57:40 · 609 阅读 · 0 评论 -
学习fcntl
linux fcntl()函数 功能描述:根据文件描述词来操作文件的特性。 #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); [描述] Fcntl()针对(文件)描述转载 2013-06-28 10:34:37 · 613 阅读 · 0 评论 -
学习ioctl
一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下: int ioctl(int fd, ind cmd, …); 其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号转载 2013-06-28 10:20:36 · 896 阅读 · 0 评论 -
学习select(函数)
select系统调用是用来让我们的程序监视多个文件句柄(file descrīptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。文件在句柄在代码都是从标准输入读入9个字节字符:#include #include #include int main(int argc, char ** argv)转载 2013-06-28 10:55:53 · 581 阅读 · 0 评论 -
基于TCP协议的网络程序(基础学习)
下图是基于TCP协议的客户端/服务器程序的一般流程:图 37.2. TCP协议通讯流程服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应翻译 2013-09-18 15:56:03 · 820 阅读 · 0 评论 -
c/c++中的string
basic_string::append向string 的后面加字符或字符串。(比+=, push_back 更灵活)(1)向string 的后面加C-stringbasic_string& append( const value_type* _Ptr );string s ( "Hello " ); // s=”Hello ”const char *c = "Out Ther转载 2013-05-05 22:16:50 · 662 阅读 · 0 评论