C语言
文章平均质量分 71
Enockipp
目前小硕在读中
展开
-
Linux动态加载动态链接库
函数 描述#include头文件定义如下四个函数dlopen 使对象文件可被程序访问dlsym 获取执行了 dlopen 函数的对象文件中的符号的地址dlerror 返回上一次出现错误的字符串错误dlclose 关闭目标文件 dlopen函数返回一个句柄,该句柄用于后续的 API 调用。dlopen的原型为:#includevoi转载 2016-10-25 15:10:06 · 662 阅读 · 0 评论 -
linux 常用头文件详解
linux常用头文件如下:POSIX标准定义的头文件 目录项 文件控制 文件名匹配类型 路径名模式匹配类型 组文件 网络数据库操作 口令文件 正则表达式 TAR归档值 终端I/O 符号常量转载 2014-06-29 14:56:59 · 1266 阅读 · 0 评论 -
linux C编程入门之静态链接库、动态链接库的编译与链接
参考1.Linux生成动态链接库的-fPIC参数问题原创 2014-06-06 20:41:21 · 1118 阅读 · 0 评论 -
浅谈C中的wprintf、宽字符显示与字符编码
以下转自:今天在CSDN的Blog首页看到一篇文章“也谈计算机字符编码 ”,由于前一阵业余翻译了“UTF-8 and Unicode FAQ for Unix/Linux”一文,自己对字符集、编码和Unicode等内容一直保着者很强的兴趣,自然不会放过这样的文章。作者的文章写得很明白易懂,虽然有一些概念上的细节问题我觉得有商榷之处;作者还给出一个简单的在windows下使用wpri转载 2014-06-26 23:34:51 · 1045 阅读 · 0 评论 -
Linux生成动态链接库的-fPIC参数问题
在 Linux 下制作动态链接库,“标准” 的做法是编译成位置无关代码(Position Independent Code,PIC),然后链接成一个动态链接库。经常遇到的一个问题是 -fPIC 是不是必需,因为好像不加经常也能正常运行,只是创建 .so 的时候会有一个警告。搜索、试验了一下,答案似乎是这样:(1) 通常的建议是始终加上 -fPIC 生成位置无关代码;(2)转载 2014-06-06 16:39:25 · 1795 阅读 · 0 评论 -
linux中select poll epoll的区别比较
在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select、poll和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加入了epoll之后,在高性能服务器领域得到广泛的应用,现在比较出名的nginx就是使用epoll来实现I/O复用支持高并发,目前在高并 发的场景下,nginx越来越收到欢迎。这里有个文章参考。Ngin转载 2014-04-26 16:44:07 · 1402 阅读 · 0 评论 -
不实例化结构体获取结构体成员在结构体中的偏移量
OFFSET宏其实在我们数据采集程序里面yo转载 2014-04-21 20:18:56 · 1715 阅读 · 0 评论 -
c/c++位操作简介--移位、位与、位或、异或
首先,计算机内部是以补码形式表示(参见:http://www.cnblogs.com/tenghoo/archive/2008/06/01/1211663.html)的,而且c移位操作采取补0还是补符号位依赖于具体的机器,在80x86中采用的是:对无符号数采用逻辑移位方式(即补0)实现,对符号数的向左移位采用和无符号数相同的方法,对符号数的向右移位采用补符号位的方式。i52400,win7,v原创 2013-08-19 13:33:25 · 8624 阅读 · 0 评论 -
EAGAIN、WOULDBLOCK、EINTR与非阻塞模式和长连接socket
EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接EWOULDBLOCK用于非阻塞模式,不需要重新读或者写EINTR指操作被中断唤醒,需要重新读/写在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blo转载 2014-04-29 22:41:36 · 2196 阅读 · 0 评论 -
locale的设定及LANG、LC_CTYPE、LC_ALL环境变量
转自:locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。[oracle@game ~]$ localeLANG=en_US.UTF-8LC_CTYPE="en_US.UTF-8"LC_NUMERIC="en_US.UTF-8"LC_转载 2014-06-29 15:42:36 · 1232 阅读 · 0 评论 -
linux C编程入门之程序启动命令行参数解析--getopt_long
#include原创 2014-06-13 16:26:50 · 1942 阅读 · 0 评论 -
类成员函数作为pthread_create函数参数
转自http://blog.csdn.net/luo6620378xu/article/details/8521940近日需要将线程池封装成C++类,类名为Threadpool。在类的成员函数exec_task中调用pthread_create去启动线程执行例程thread_rounter。编译之后报错如下:spfs_threadpool.cpp: In member functi转载 2016-01-14 11:30:24 · 2353 阅读 · 0 评论 -
C/C++学习之strlen与sizeof区别、阿里巴巴笔试题实例
1.strlen是一个函数,而sizeof是一个操作符,它和解引用操作符*、取地址操作符&具有相同的优先级,具有右结合性,参见C++PRIMER第四版P1472.strlen是计算字符串中字符的个数,它计算的是从字符串首字符到'\0'前一字符的个数,即不包括'\0'在内。这个函数依赖与'\0‘这个结束标志,这也是C字符串的特点,比如计算下面字符数组的长度时,就会出现问题,char test[5原创 2014-03-30 15:46:00 · 1420 阅读 · 4 评论 -
文件内存映射mmap解决大文件快速读写问题和进程间共享内存
mmap函数主要用途有三个:1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说转载 2014-08-09 11:08:32 · 5655 阅读 · 0 评论 -
linux下libevent安装配置与简介 以及 linux库文件搜索路径的配置
libevent简介libevent下载libevent安装简单shili原创 2014-05-30 10:13:19 · 6475 阅读 · 0 评论 -
Linux C之动态库、静态库混合链接
以前写程序时要么是链接动态库要么是链接原创 2014-08-20 15:02:50 · 916 阅读 · 0 评论 -
printf与wprintf不能同时混合使用的原因
ISO C90 introduced the new type wchar_t to allow handling larger character sets. What was missing was a possibility to output strings of wchar_t directly. One had to convert them into multibyte stri转载 2014-07-14 21:20:46 · 1634 阅读 · 3 评论 -
fdopen与socket---文件描述符与文件指针间的转换
很多互联网上的协议例如HTTP、SIP、SMTP、FTP的控制连接协议都是基于文本行的。所谓基于文本行,指的是信息以文本传递,一个信息单元传递完毕后要传送换行。比如对于HTTP的GET请求来说,GET /index.html HTTP/1.0是一行,接下去每个头部信息各占一行。一个空行表示整个请求结束。而tcp是基于流的,使用read/recv和write/send一次读入或写入的字节可能比要转载 2014-07-12 10:39:32 · 2736 阅读 · 0 评论 -
C语言在函数名与函数体之间定义变量--K&r C和ANSI C两种风格的函数声明和定义
转自:点击打开链接K&R C的函数声明:function();这种方式声明的函数,在向其传递参数时,较小类型的参数会被进行隐式类型转换,如char、short被转换为int,float被转换为double。即堆栈中所存储的参数其所占字节数大于实际应该占用的字节ANSI C的函数声明:int function( char c, short si,转载 2014-06-21 10:03:10 · 3453 阅读 · 0 评论 -
linux C语言函数之strtok和strtok_r
1.一个应用实例网络上一个比较经典的例子是将字符串切分,存入结构体中。如,现有结构体typedef struct person{ char name[25]; char sex[10]; char age[4]; }Person;需从字符串 char buffer[INFO_MAX_SZ]="Fred male 25,John male 62,Anna female转载 2014-02-23 21:32:16 · 5455 阅读 · 0 评论 -
linux c语言 system系统调用与popen的使用
system系统调用有很多诟病,很多人推荐使用popen1.popen的函数原型为:#includeFILE*popen(const char* command,const char* type);popen的实现是:通过fork产生一个子进程,然后子进程来执行command对应的命令,并且创建了一个管道,这个管道的作用是实现这个子进程与调用进程之间的命令、参数以及返回值的传递(本原创 2014-02-23 17:09:19 · 4708 阅读 · 0 评论 -
win下vs预编译头文件
预编译头文件 今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, 就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 结果不能编译了,我靠: fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\': No such file or direct转载 2014-01-28 10:16:04 · 1299 阅读 · 0 评论 -
linux下c之container_of宏讲解
container_of()宏在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr:转载 2013-10-16 10:44:38 · 1270 阅读 · 0 评论 -
linux c typeof创建结构体元素类型用法
文章转自:最后给出我自己的一个小例子typeof的用法 首先typeof这个东西并不是ISO/IEC 9899:1999里的,也就是说不是标准C的运算符,这是gcc的一个扩展。在gcc的官方文档中单独列了一章来说这个东西(5.6 Referring to a Type with typeof)。具体的内容如下:Another way to refer to转载 2013-10-15 20:49:33 · 3777 阅读 · 0 评论 -
struct tm和time_t总结
转自:http://zhouruijun163.blog.163.com/blog/static/1077156200910300330794/1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中转载 2013-10-10 20:59:19 · 1173 阅读 · 0 评论 -
函数指针的用处
记得刚开始工作时,一位高手告诉我,longjmp和setjmp玩得不熟,就不要自称为C语言高手。当时我半信半疑,为了让自己向高手方向迈进,还是花了一点时间去学习longjmp和setjmp的用法。后来明白那不单是跳来跳去那样简单,而是一种高级的异常处理机制,在某些情况下确实很有用。为了显示自己的技巧,也在自己的程序中用过几次。渐渐发现这样的技巧带来的好处是有代价的,破坏了程序的结构化设计,转载 2013-03-16 23:55:31 · 994 阅读 · 0 评论 -
CRT函数解读
C Runtime是windows平台下的一个概念。一般来说,CRT函数就是标准的C语言函数。例如,printf、scanf、strlen、fopen等函数就属于CRT函数。在windows下所有的CRT函数最终都是转化成为win32 API来执行的。windows本身并没有在内核之上提供对CRT的支持。 CRT既可以通过静态连接来实现,也可以通过动态链接来实现(MSVCRT.DLL)。转载 2013-03-17 14:49:34 · 1131 阅读 · 0 评论 -
c++ 不建议使用字符串常量到 char*的转换
转自:http://blog.csdn.net/haoel/article/details/1395358我相信,使用C/C++多年的人对下面这个字符串赋值语句都不会陌生吧。 char* p = "test";同时,我也相信,各位在使用这种语句后吃过很多苦头也不少吧?只要你想利用指针p来改变字符串的内容,你的程序都会得到一个让你颜面尽失一个内存非法操作转载 2013-09-09 09:44:44 · 2271 阅读 · 0 评论 -
linux命令cc与gcc比较
文章来自:http://www.360doc.com/content/10/0819/09/935385_47111428.shtml从名字上看,老的unix系统的cc程序叫做c compiler。但gcc这个名字按gnu的说法叫做gnu compiler collection。因为gcc包含很多编译器(c,c++,objective-c,ada,fortran,java)。所以它们是不一样的转载 2013-09-03 15:21:49 · 1060 阅读 · 0 评论 -
mdsplus之C与mdsplus交互--连接建立和打开tree
参见mdsplus官网的tutorial:Accessing mdsplus data in fortan,idl,matlab and c1.首先需要启动数据库服务端mdsip:命令是: mdsip -p num -m -h filename ,其中 p代表端口号,m我还不知道是什么意思,但是没它会出现端口问题,h代表了权限列表文件,如果-h后面不写文件名的话,默认是/etc/mdsip原创 2013-08-28 22:40:42 · 2173 阅读 · 0 评论 -
linux进程通信IPC之IPC_PRIVATE与ftok比较
在linux中,可以使用IPC对象来进行进程间通信。IPC对象存在于内核中,多进程可以操作同一个IPC对象。每个IPC对象都有一个唯一的编号,该编号是由系统分配的。那么不同的进程如何知道这个编号,进而通过它进行通信呢?下面以共享内存为例,进行分析。方法一:通过ftok函数,产生相同的键值。假设,进程p1创建了共享内存。可以在创建时,调用ftok函数,得到一个key值,调用s转载 2013-11-18 10:59:30 · 14835 阅读 · 0 评论 -
socket编程中的read、write与recv、send的区别
1 recv和sendrecv和send函数提供了和read和write差不多的功能.但是他们提供 了第四个参数来控制读写操作.int recv(int sockfd,void *buf,int len,int flags)int send(int sockfd,void *buf,int len,int flags)前面的三个参数和read,write相同,第四个参数能够是0或是转载 2014-01-14 10:18:19 · 2724 阅读 · 0 评论 -
linux_c之ioctl的FIONREAD参数
ioctl 是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的。而read,write 是把数据丢入缓冲区,硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区。FIONREAD就是返回缓冲区中有多少字节;ioctl(keyFd, FIONREAD, &b)得到缓冲区里有多少字节要被读取,然后将字节数放入b里面。接下来就可以用read了,read(keyFd,转载 2014-01-12 20:46:35 · 3227 阅读 · 0 评论 -
常量折叠的理解
下面代码的输出为#includeint main(int argc,char** argv){ const int a=1; int* b=const_cast(&a); *b=2; std::cout<<&a<<std::endl; std::cout<<a<<std::endl; std::cout<<b<<std::endl; std::cout<<*b<<std:转载 2013-12-02 19:17:41 · 993 阅读 · 0 评论 -
pongo题解之数组排序
本来3星15分的题,结果头天晚上没想出来,今天早上好好想了下,一次搞定,但是发现是2星10分了,唉~~第2次遇到这样的事,看来以后还是早点想方法。首先还是说下题目:本题来自caopengcs(向大牛致敬!),只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”内),以下是题目详情:给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把原创 2013-09-06 10:49:17 · 926 阅读 · 0 评论 -
pongo题解之子序列的个数
中午看到群里面在说出新题了,今天晚上本来没打算做题,本来安排是晚上在win下安装mdsplus,但是又怕像以前那样过一天就降分了,所以还是今晚做了。首先题目要求(摘自庞果网,http://www.pongo.cn):本题同样来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”->“我要发布”内),以下是题目详情: 子序列的定义:对于一个序列a=a[1]原创 2013-09-18 13:46:12 · 1215 阅读 · 0 评论 -
pongo题解之字符串消除
题目详情给定一个字符串,仅由a,b,c 3种小写字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如有ab或ba连续出现,你把它们替换为字母c;有ac或ca连续出现时,你可以把它们替换为字母b; 有bc或cb 连续出现时,你可以把它们替换为字母a。你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度。输入原创 2013-09-03 22:08:57 · 1255 阅读 · 0 评论 -
_beginThreadex 创建多线程解读
_beginThreadex创建多线程解读一、需要的头文件支持#include // for _beginthread()需要的设置:ProjectàSetting-->C/C++-->User run-time library 选择Debug Multithreaded 或者Multithreaded。即使用: MT或MTD。源码如下:[cpp] vie转载 2013-03-17 14:47:22 · 1049 阅读 · 0 评论