linux
文章平均质量分 66
普通网友
这个作者很懒,什么都没留下…
展开
-
undefined reference to error解决方法
Linux下编译,链接程序时,经常会遇到“undefined reference error” 报错,这种错误一般是在找不到相应的库文件的时候产生的。下面是几个常见的问题(原理还不清楚,解释的也不专业,希望能解决一般问题)1. undefined reference to `operator delete(void*)/‘new(void *)’在用gcc进行编译时,有时候会出现这样的原创 2011-08-11 12:42:43 · 34012 阅读 · 0 评论 -
undefined reference to `std::cin'
背景:在Linux下直接man cin/cout 是没有结果的,刚开始以为无法在Linux下使用cin/cout,后来看到网上确实有一些类似的代码,所以做了一个简单的实验,代码如下:#include using namespace std;int main(){ char name[16]={0}; printf("请输入姓名\n"); cin>>name原创 2011-12-09 14:42:57 · 5259 阅读 · 0 评论 -
linux 常用时间函数及时间类型
参照:http://www.linuxdiyf.com/viewarticle.php?id=81130常用的数据类型time_t 一般用来存储国际化时间,用time()函数可直接获取到;结构体:tm 一般用来存储本地时间,可通过将time_t格式转化而来;结构体:time_val原创 2011-08-12 09:23:17 · 1730 阅读 · 0 评论 -
iconv() errno:EILSEQ(InBuf多字节序无效)
环境:Linux,C++问题:在发送消息时,需要将utf-8编码转换为utf-16编码,因此需要用到iconv()函数族在用iconv()函数进行转换时,出现了错误,提取errno得到EILSEQ错误,即待转换的char*所指向的内容多字节序无效(个人理解为有乱码)探查原因:调试程序,发现原来是自己结构体没有填充完善造成的。(粗心害死人)原因:在转换前,内存空间是进原创 2011-12-21 10:40:55 · 5805 阅读 · 1 评论 -
Linux int型转换为char*型
在Linux中没有itoa()函数,只有atoi() 这点很有趣,居然不对称所以在Linux中实现从整型到char*的转换,一般使用如下两种方法:(1)用sprintf()函数来实现sprintf(char * cValue, "%d", int nValue);这种方法简单易行,比较喜欢(2)自己定义函数进行转换网上有很多自己的实现,用于跨平台的整型,字符型转换原创 2011-12-15 12:33:34 · 9820 阅读 · 0 评论 -
Cannot insert breakpoint 0.
环境:Linux GCC问题:134 int nRet=close(m_threadPool[pos]->sock);(gdb) Warning:Cannot insert breakpoint 0.Error accessing memory address 0xaa8ce1d1: 输入/输出错误.394 int nRecv=recv(原创 2011-12-16 09:15:18 · 6647 阅读 · 0 评论 -
Linux下char类型可能带来的问题
问题起因:linux下C++采用utf-8编码方式,因此char类型不是单纯的一个字符一个字节。一个英文字符占一个字节,而一个中文字符则不只占了一个字节(具体查看Unicode编码方案简介及实现一文)。如下所示,分别输出中文的“王子”和其中文拼音的“wangzi”代码: char name[16]={0}; strcpy(name, "WangZi");原创 2011-12-14 13:18:55 · 4162 阅读 · 0 评论 -
Linux下编码转换(iconv函数族)
转自:http://www.linuxdiyf.com/viewarticle.php?id=45164在Linux上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现(针对文件进行转换) 一、利用iconv函数族进行编码转换 iconv函数族的头文件是iconv.h使用前需包含之:#include iconv函数族有三个函数,原型如下:(1转载 2011-12-14 21:55:57 · 15929 阅读 · 1 评论 -
iconv()函数进行编码转换时的一个注意点
是在做例子的时候发现的,尚不知道原因...iconv()将发送的消息从utf-8转为utf-16时,前面会增加了\377\376而在其他代码间转换时,没有发现类似的问题测试的时候包括了:utf-16->utf-8utf-16->ascIIutf-8->gb2312...原创 2012-03-27 10:34:04 · 642 阅读 · 0 评论 -
关于结构体的编码转换
使用环境:在网络通信中,使用结构体进行通信结构体如下:客户端(采用utf-16编码): [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] struct MsgHead { [MarshalAs(UnmanagedType.ByValArray, SizeConst原创 2012-03-27 11:37:05 · 86 阅读 · 0 评论 -
Program received signal SIGPIPE, Broken pipe.
参考:http://blog.csdn.net/hejianhua/article/details/5994915原创 2011-12-09 12:43:42 · 809 阅读 · 0 评论 -
段错误bug的调试
转自:http://blog.chinaunix.net/space.php?uid=317451&do=blog&id=92412方法一和二适用与像我一样的新手,:-)我们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的。实际上,内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些小错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除转载 2011-11-22 11:06:05 · 469 阅读 · 0 评论 -
Ubuntu安装配置Mysql
转自:http://www.cnblogs.com/wuhou/archive/2008/09/28/1301071.html三种安装方式: 1. 从网上安装 sudo apt-get install mysql-server。装完已经自动配置好环境变量,可以直接使用mysql的命令。 注:建议将/etc/apt/source.list中的cn改成us,美国的服务器转载 2011-12-08 20:42:25 · 505 阅读 · 0 评论 -
一个特别的multiple definition错误
环境:ubuntu 11.10,Emacs在BasicMsgSender类中定义了两个静态方法:SendTcpMsg(),SendUdpMsg(),用于一般的发送消息。在其他两个类中,引用了该方法:BasicMsgSender::SendTcpMsg()在链接的时候,提示这两个静态函数被重复定义multiple definition of `BasicMsgSender::sendTc原创 2011-12-02 13:09:54 · 787 阅读 · 0 评论 -
linux socket编程 篇二
转自: http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时原创 2011-08-01 09:27:21 · 419 阅读 · 0 评论 -
Linux下的C编程实战(二)----文件系统编程
Linux文件系统Linux支持多种文件系统,如ext、ext2、minix、iso9660、msdos、fat、vfat、nfs等。在这些具体文件系统的上层,Linux提供了虚拟文件系统(VFS)来统一它们的行为,虚拟文件系统为不同的文件系统与内核的通信提供了一致的接口。在Linux平台下对文件编程可以使用两类函数:(1)Linux操作系统文件API;(2)C语言I/O库函数。前者依赖于原创 2011-08-03 09:37:24 · 621 阅读 · 0 评论 -
虚拟机 安装 red hat 常出现的问题
现象1:安装到需要分区的时候出现 :发现错误,未找到要在其中创建新文件系统的有效设备。原因 VM默认硬盘是scsi硬盘,从网上看到的说法是:scsi硬盘需要专门的驱动,windows系统带有,而read hat 没有,所以不好装。可是我安装9.0的时候没有遇到这个问题,在enterprise 5 号称 RedHat 12的时后却出现了问题。Fedora也是一样的问题。解决办法:把原来的转载 2011-07-30 19:32:01 · 1255 阅读 · 0 评论 -
“warning: the `gets' function is dangerous and should not be used.
在编译到时候碰到如下问题:“warning: the `gets' function is dangerous and should not be used.在另外一个环境下编译到时候是没有问题到,现在搬到另外一个环境下出该问题,可能是环境问题在网上查了下,说是“ Linux 下gcc编译器不支持这个函数,解决办法是使用 fgets”fgets()函数的基本用法为:fget原创 2011-12-07 08:50:57 · 1581 阅读 · 0 评论 -
cannot find -lmysqlclient
背景:在Linux下,用MySQL数据库编写程序,需要用到-lmysqlclient链接MySQL库但是在链接到过程中,提示错误:cannot find -lmysqlclient 查错:(1)-lmysqlclient中的-l是选项,-lmysqlclient表示链接libmysqlclient.so,文件的前缀和后缀都是默认的。使用 locate *mysqlclient*原创 2011-12-07 10:24:46 · 3173 阅读 · 0 评论 -
GCC最基本的用法
在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。 下面是man gcc的结果:gcc [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn...]原创 2011-08-18 08:42:46 · 554 阅读 · 0 评论 -
Linux 入门常用命令 — 文件的复制、删除和移动
cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大。 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。该命令的各选项含义如下:- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。- d原创 2011-08-03 20:45:28 · 512 阅读 · 0 评论 -
gdb调试器的使用---按功能划分
转载自:http://zjf30366.blog.163.com/blog/static/41116458200832685159740/查看程序出现段错误的语句,可以使用where命令,好像与bt命令相同。GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB转载 2011-08-04 21:22:08 · 915 阅读 · 0 评论 -
结构体编码转换中碰到的问题
使用环境:在网络通信中,使用结构体进行通信结构体定义如下:客户端(采用utf-16编码): [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] struct MsgHead { [MarshalAs(UnmanagedType.ByValArray, SizeCo原创 2012-03-27 12:42:13 · 789 阅读 · 0 评论 -
Linux环境进程间通信(二):信号(下)
转自:http://www.hackbase.com/lib/2006-09-10/13316.html在信号(上)中,讨论了linux信号种类、来源、如何安装一个信号以及对信号集的操作。本部分则首先讨论从信号的生命周期上认识信号,或者宏观上看似简单的信号机制(进程收到信号后,作在信号(上)中,讨论了linux信号种类、来源、如何安装一个信号以及对信号集的操作。本部分则首先讨论从信号的生命转载 2012-03-28 08:23:22 · 82 阅读 · 0 评论 -
Linux环境进程间通信(二): 信号(上)
转自:http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html一、信号及信号来源信号本质信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进转载 2012-03-28 08:21:42 · 78 阅读 · 0 评论 -
Linux环境进程间通信(四):信号灯
转自:http://www.bccn.net/Article/kfyy/vc/jszl/200708/5852.html一、信号灯概述信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制。相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志。除了用于访问控制外,还可用于进程同步。信号灯有以下两种类型:1> 二值信号灯:转载 2012-03-28 16:49:50 · 2279 阅读 · 0 评论 -
Linux环境进程间通信(一):管道
转自:https://www.ibm.com/developerworks/cn/linux/l-ipc/part1/1 管道相关的关键概念管道是Linux支持的最初Unix IPC( Inter process commuication )形式之一,具有以下特点:1> 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;2> 只能用于父子进程或者兄弟进程之转载 2012-03-28 08:19:50 · 747 阅读 · 0 评论 -
Linux下定时的实现
转载自:http://www.cnblogs.com/feisky/archive/2010/03/20/1690561.html使用定时器的目的无非是为了周期性的执行某一任务,或者是到了一个指定时间去执行某一个任务。要达到这一目的,一般有两个常见的比较有效的方法。一个是用linux内部的三个定时器:ITIME_REAL,ITIMER_VIRTUAL,ITIME_PROF;另一个是转载 2011-08-12 15:19:40 · 702 阅读 · 0 评论 -
Linux环境进程间通信(五): 共享内存(上)
转自:http://www.bccn.net/Article/kfyy/vc/jszl/200708/5853.html共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是:同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信转载 2012-03-28 16:51:01 · 1289 阅读 · 0 评论 -
Linux环境进程间通信之有名管道(FIFO)的注意事项
1. FIFO文件是受内核保护的,所以程序在执行的时候需要Root权限,否则会提示错误:EACCES2. 程序执行时,需要创建一个FIFO文件,结束之后应该予以删除,避免造成垃圾文件3. 除了通过mkfifo()来创建FIFO文件之外,其他跟使用普通文件的方法类似:open()/ read()/ write()4. 关于FIFO文件的使用步骤: 1> 通过mkfifo()创建原创 2012-04-04 09:56:04 · 1347 阅读 · 0 评论 -
Linux环境进程间通信(二):有名管道(FIFO)
转自:https://www.ibm.com/developerworks/cn/linux/l-ipc/part1/1 有名管道相关的关键概念管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即转载 2012-03-28 11:46:04 · 2442 阅读 · 0 评论 -
分配空间不足引起的错误:‘Stack smashing detected’
使用环境:ubuntu 11.10、C++出错情景:使用mysql执行一个query语句,以进行一个涉及多个表的联合查询(query语句比较长)代码如下:char query[128]={0};sprintf(query, ".....");...return myList;执行结束之后,返回一个list类型的值#include void func()原创 2012-03-21 09:49:11 · 32153 阅读 · 3 评论 -
编译错误:包含了头文件,但提示类未声明(头文件相互包含引起)
使用环境:Ubuntu 11.10 G++错误出现:在编译一个相互包含头文件的代码(A.h中包含B.h,B.h中包含A.h)但是编译出现错误,提示:A.h文件中,B类未声明;B.h文件中,A类未声明错误分析:在头文件中已经用#include 刚开始还以为是名字有错误,一直在检查后来确定没有输入错误时,确定应该是编码的问题之前在头文件相互包含的时候好像也碰到过类似原创 2012-04-12 11:53:42 · 5971 阅读 · 4 评论 -
Linux下的多线程编程
转载:http://fanqiang.chinaunix.net/a4/b8/20010811/0905001105.html(有修改)1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现转载 2011-08-12 21:13:37 · 542 阅读 · 0 评论 -
Linux 进程间通信之信号灯的几点注意事项
1. 关于union semun结构体的定义和头文件的包含在用信号灯进行通信时,包含头文件:#include #include #include 但是,在编译程序的时候提示错误,提示union semun对应的类型不存在看到有加头文件:#include (不便于程序移植,如果包含该头文件,则不能移到UNIX系统下)但在加上该头文件之后,又会提示,说有些数据结构被重原创 2012-03-31 13:42:44 · 987 阅读 · 0 评论 -
ftok() ENOENT: A component of path does not exist, or path is an empty string.
使用环境:Ubuntu 11.11 c++错误产生:使用ftok()函数来映射一个键值,函数很简单#include #include key_t ftok(const char *pathname, int proj_id);即传递一个路径名,一个辅助数值即可唯一定位一个键值代码如下: //获取对应的键值 key_t key=ftok(SEM_P原创 2012-03-31 13:57:40 · 1151 阅读 · 0 评论 -
Linux 进程间通信
转自:http://www.cnblogs.com/linshui91/archive/2010/09/29/1838770.html一、进程间通信概述进程通信有如下一些目的:A、数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间B、共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。C、通知事件:一个进程转载 2012-03-27 19:18:00 · 593 阅读 · 0 评论 -
Linux环境进程间通信之信号机制(二)
一、信号生命周期从信号发送到信号处理函数的执行完毕对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生;信号在进程中注册完毕;信号在进程中的注销完毕;信号处理函数执行完毕。相邻两个事件的时间间隔构成信号生命周期的一个阶段。下面阐述四个事件的实际意义:1. 信号"诞生"。信号的诞生指的是触发信号转载 2011-08-12 17:04:14 · 458 阅读 · 0 评论 -
Linux环境进程间通信之信号机制(一)
转载:IBM linux文档库 中关于信号的介绍:http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html一、信号及信号来源信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,转载 2011-08-12 16:31:10 · 605 阅读 · 0 评论 -
expected unqualified-id before string constant
使用环境:Linux / C++错误发现:在代码编写完成之后,编译时发现如下错误:/usr/include/errno.h:32:1: 错误: expected unqualified-id before string constant错误查找:很奇怪的错误,难道系统提供的头文件也会出错?后来发现,在定义完类之后,没有加" ; "在Windows下,此类错误是会原创 2012-03-29 15:39:48 · 16345 阅读 · 5 评论