随笔分类 -  Linux 基础

摘要:1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可 阅读全文
posted @ 2016-04-18 10:48 星语海蓝 阅读(595) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2015-09-10 16:26 星语海蓝 阅读(7) 评论(0) 推荐(0) 编辑
摘要:一、多线程调试1. 多线程调试,最重要的几个命令:info threads 查看当前进程的线程。 GDB会为每个线程分配一个ID, 后面操作线程的时候会用到这个ID. 前面有*的是当前调试的线程.thre... 阅读全文
posted @ 2015-09-09 14:17 星语海蓝 阅读(363) 评论(0) 推荐(0) 编辑
摘要:一、 依赖动态库的动态库libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而main.exe又调用了libfun.so的函数int nothing()。下面两种方式都能工作:1> 常用... 阅读全文
posted @ 2015-08-27 20:25 星语海蓝 阅读(2976) 评论(0) 推荐(0) 编辑
摘要:在开发中,除了在本机文件夹上进行svn更新外,在命令行中进行svn操作也非常关键,下面列举下网站摘抄的一些文档:1、将文件checkout到本地目录svn checkoutpath(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写... 阅读全文
posted @ 2015-07-20 20:05 星语海蓝 阅读(937) 评论(0) 推荐(0) 编辑
摘要:Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲tar命令的基本用法: tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项... 阅读全文
posted @ 2014-09-17 11:17 星语海蓝 阅读(299) 评论(0) 推荐(0) 编辑
摘要:引用:http://community.csdn.net/Expert/TopicView3.asp?id=4374496linux下进程间通信的几种主要手段简介:1.管道(Pipe)及有名管道(namedpipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有... 阅读全文
posted @ 2014-07-01 15:19 星语海蓝 阅读(3972) 评论(0) 推荐(0) 编辑
摘要:GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能:启动程序,可以按照工程师自定义的要求随心所欲的运行程序。让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式。当程序被停住时,可以检查此时程序中所发生的事,并追索上文。动态地改变程序... 阅读全文
posted @ 2014-07-01 14:45 星语海蓝 阅读(561) 评论(0) 推荐(0) 编辑
摘要:Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。 第二类是动态链接的可执行程序。 静态可执行程序与动态可执行程序比较 我们可以... 阅读全文
posted @ 2014-04-30 14:59 星语海蓝 阅读(487) 评论(0) 推荐(0) 编辑
摘要:串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。串口通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一。Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备。在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面。如 阅读全文
posted @ 2014-03-06 13:25 星语海蓝 阅读(11444) 评论(1) 推荐(1) 编辑
摘要:#include #include #includeusing namespace std; int utf8togb2312(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen) { iconv_t cd; if( (cd = iconv_open("gb2312","utf-8")) ==0 ) return -1; memset(destbuf,0,destlen); const char **source = &sourcebuf; char **dest 阅读全文
posted @ 2014-02-26 12:36 星语海蓝 阅读(9807) 评论(0) 推荐(0) 编辑
摘要:你的软件在某个时刻停止服务,CPU占用达到100%+,这种问题一个可能的原因是产生了死循环,假设程序某处存在潜在的死循环,并在某种条件下会引发,本文以一个示例来定位出现死循环的位置。当程序某处存在死循环,通常定位问题及缩小范围的方法是,在可疑的代码处加log,或者注释掉可疑代码,这对于容易重现问题的程序来说还好,但对于“偶尔”才会产生问题程序却很难调试,因为我们很难重现程序故障。本文所述的调试过程正是在这种情况下,假设问题已经出现,我们要求环境保护现场,即出问题的程序还在运行中。1.我们首先要知道是哪个线程出了问题:首先查一下出问题进程的pid,例如ovtsvn@ovtsvn:~/MASS4/ 阅读全文
posted @ 2013-10-28 09:38 星语海蓝 阅读(20717) 评论(0) 推荐(3) 编辑
摘要:工程中的代码分别存放在add/add_int.c、add/add_float.c、add/add.h、sub/sub_int.c、sub/sub_float.c、sub/sub.h、main.c中。文件main.c#include #include "add.h"#include "sub.h"int main(void){ int input = 0; int a = 10, b = 12; float x= 1.23456,y = 9.87654321; printf("int a+b IS:%d\n",a+b); printf( 阅读全文
posted @ 2013-09-24 15:02 星语海蓝 阅读(557) 评论(0) 推荐(0) 编辑
摘要:每个程序实质上都会链接到一个或者多个的库。比如使用C函数的程序会链接到C运行时库,GUI程序会链接到窗口库等等。无论哪种情况,你都会要决定是链接到静态库(static libary)还是动态库(dynamic libary)。链接到静态库会使你的程序臃肿,并且难以升级,但是可能会比较容易部署。而链接到动态库会使你的程序轻便,并且易于升级,但是会难以部署。静态库静态库也就相当于是把一系列的object文件放在同一个文件中(类似windows中的.lib文件)。当你提供一个静态库给链接器时,连接器将会搜索静态库,从中找到他所需要的object文件,提取出他们,将他们链接到你的程序中,就像你直接提供 阅读全文
posted @ 2013-09-24 11:07 星语海蓝 阅读(475) 评论(0) 推荐(0) 编辑
摘要:为了编译一个简单的源文件main.c,需要自动生成一个makefile,以下是步骤:第一步:----------在/root/project/main目录下创建一个文件main.c,其内容如下:------------------------------------------------#include int main(int argc, char** argv){ printf("Hello, Auto Makefile!\n"); return 0;}------------------------------------------------此时状态如下:[ro 阅读全文
posted @ 2013-07-17 10:06 星语海蓝 阅读(526) 评论(0) 推荐(0) 编辑
摘要:Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。服务端 和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。 比如上面的文件获取中,另外一个地方的程序就是服务端,我们从服务端获取文件过来。互为客户和服务端 实际生活中有些程序是互为服 阅读全文
posted @ 2012-10-27 15:51 星语海蓝 阅读(1488) 评论(0) 推荐(0) 编辑
摘要:Select在Socket编程中还是比较重要的,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。 Select的函数格式(Unix系统下的伯克利socket编程,和windows下的略有区别,体现两个方面:一是select函数的第一个参数,在windows下可以忽略,但在linux下必须设为最大文件描述符加1;二是结构fd_set在两个系统里定义不一样):int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); /*参数列表int maxfd. 阅读全文
posted @ 2012-10-22 10:13 星语海蓝 阅读(6830) 评论(0) 推荐(0) 编辑
摘要:一. 共享内存介绍系统V共享内存指的是把所有共享数据放在共享内存区域(IPC shared memory region),任何想要访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面。系统调用mmap()通过映射一个普通文件实现共享内存。系统V则是通过映射shm文件系统中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应shm文件系统的一个文件.二、系统V共享内存API对于系统V共享内存,主要有以下几个API:shmget()、shmat()、shmdt()及shmctl()。#include <sys/ipc.h>#includ 阅读全文
posted @ 2012-10-19 18:16 星语海蓝 阅读(878) 评论(0) 推荐(0) 编辑
摘要:daemon进程步骤1. 调用fork产生一个子进程,同时父进程退出,所有后续工作都在子进程中完成。如果我们是从命令行执行的该程序,这可以造成程序执行完毕的假象,shell会回去等待下一条命令;刚刚通过fork产生的新进程一定不会是一个进程组的组长,这为第2步的执行提供了前提保障。由于父进程已经先于子进程退出,会造成子进程没有父进程,变成一个孤儿进程(orphan)。每当系统发现一个孤儿进程,就会自动由1号进程收养它,这样,原先的子进程就会变成1号进程的子进程。2. 调用setsid系统调用。这是整个过程中最重要的一步。它的作用是创建一个新的会话(session),并自任该会话的组长(sess 阅读全文
posted @ 2012-10-19 11:13 星语海蓝 阅读(299) 评论(0) 推荐(0) 编辑
摘要:创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(),当然某些进程如init等是作为系统启动的一部风而被内核创建的。1.fork函数介绍#include sys/types.h>#include unistd.h>pid_t fork (void );正确返回:父进程中返回子进程的进程号;子进程中返回0;(单调用双返回函数)错误返回:-1;子进程是父进程的一个拷贝。具体说,子进程从父进程那得到了数据段和堆栈段,但不是与父进程共享而是单独分配内存。fork函数返回后,子进程和父进程都是从fork函数的下一条语句开始执行。由于子进程与父进程的运行是无关的,父进程可 阅读全文
posted @ 2012-10-19 10:09 星语海蓝 阅读(302) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示