linux C开发
漫步者2011
欢迎来找茬!
展开
-
头文件解析
目录c源文件中要包含自己的头文件c源文件中要包含自己的头文件c源文件中要包含自己的头文件_一只小菜鸟-CSDN博客原创 2021-09-29 10:30:04 · 117 阅读 · 0 评论 -
系统函数使用
目录sprintfsprintffor (i = 0; i < 17; i++) { sprintf(buffer+i*3, "%02X ", hex[i]);//itoa}以上代码每次都会写入4个字节如i=0时,hex[0]hex[1]空格\0; \0为编译器自动添加的,故最后会有内存访问越界问题。...原创 2021-09-28 12:59:27 · 124 阅读 · 0 评论 -
linux编程之ipc
ipc:进程间通信。消息队列 消息队列的访问具备锁机制处理,即一个进程在访问时另一个进程不能访问.”转载 2014-11-11 21:22:40 · 373 阅读 · 0 评论 -
编译与链接
在编译时,在动态库和静态库都存在时,默认是链接动态库,但是可以使用 -static强制链接静态库。但此时需要注意,指定后会链接的所有库都是静态库,如: gcc xxx.c -lpthread -static -lm : 此时所有的库包括c库都是静态库。链接静态库时,只会加载进用到的函数,但是编译时的.o,会将所有的函数(不管是否被引用)都加载进可执行文件中。原创 2016-05-17 19:06:16 · 356 阅读 · 0 评论 -
记录一些移动开发的英文单词发音
上http://www.youtube.com或者优酷搜些视频听听就知道正确读音了。不管怎么说,移动开发都是外国的牛人多些,要做好交流,单词读音的正确性很重要。有些单词经常被同事读错,来此做个确认。Chromekrom 这是google开发者的读音,没有按照以e结尾就发元音的规则。Chromium这个又发 ou 元音了。 [英][ˈkrəʊmiəm][美][ˈkromi转载 2016-05-13 16:02:51 · 791 阅读 · 0 评论 -
Linux编程命名规则
如果只是编写一些小程序,程序只有几十或几百行,编程风格可能并不重要。然而,如果是和许多人一起进行一定规模的项目开发,或者希望过一段时间之后,还能够快速而准确地理解自己的程序,就必须养成良好的编程习惯。良好的编程风格可以增加程序代码的可读性。编程风格最能体现一个程序员的综合素质。变量的命名规范是编程风格的一项重要内容。在Windows下开发软件,许多人采用匈牙利命名法,而在Linux环境下,并不原创 2014-11-09 14:26:56 · 4898 阅读 · 0 评论 -
关于编译报错“dereferencing pointer to incomplete type...
今天同事问了我一个问题,他make的时候报错,“第201行:dereferencing pointer to incomplete type”,我随即查阅了很多资料,也没看出个所以然。最后问题得到了解决,也懂得了原理,遂记录一下。他的问题具体是这样。?123456#include转载 2015-09-24 12:25:44 · 374 阅读 · 0 评论 -
卓有成效的敏捷开发流程
随着带的团队做的事情越来越多, 发布的产品也越来越多, 关于软件开发的流程的思考也越来越多.前段时间的高效虚拟自适应团队是在历经困难后磨练出来的方法的总结, 在此基础上,又经过几个版本发布的洗礼,对之前的认识又有了更新,更深入的看法. 在此特提炼出一套方法论, 供大家参考. 一个软件从开发到上市(我们抛去维护部分), 一般需要经历阶段有 需求分析, 方案设计, 开发方案设计(包括概要转载 2015-09-21 18:24:56 · 590 阅读 · 0 评论 -
线程中解决sigpipe信号问题
有时候线程会出现SIGPIPE错误: (gdb) bt#0 0x00110416 in __kernel_vsyscall ()#1 0x0092f918 in send () from /lib/libpthread.so.0 这是因为在调用socket发送函数send()时,出现的异常错误,可能的原因是因为tcp连接可能不正常,导致了send()数据失败,系统会收到转载 2016-07-06 12:13:56 · 3167 阅读 · 1 评论 -
为什么使用sigaction而非signal
所以希望能用相同方式处理信号的多次出现,最好用sigaction.信号只出现并处理一次,可以用signal. signal函数每次设置具体的信号处理函数(非SIG_IGN)只能生效一次,每次在进程响应处理信号时,随即将信号处理函数恢复为默认处理方式.所以如果想多次相同方式处理某个信号,通常的做法是,在响应函数开始,再次调用signal设置,如下图:int sig_int(); //My转载 2016-07-06 12:15:56 · 2825 阅读 · 0 评论 -
socket编程之read/write
一. read/write的语义:为什么会阻塞?先从write说起:#include ssize_t write(int fd, const void *buf, size_t count);首先,write成功返回,只是buf中的数据被复制到了kernel中的TCP发送缓冲区。至于数据什么时候被发往网络,什么时候被对方主机接收,什么时候被对方进程读取,系统调用层面不会转载 2016-05-13 15:57:21 · 17983 阅读 · 0 评论 -
eclipse使用
windows中使用linux中使用原创 2017-03-15 14:25:47 · 244 阅读 · 0 评论 -
单例模式
定义一个类只能创建一个实例,如人任务管理器,正在打印的任务等.Singleton 模式是设计模式中最为简单、最为常见、最容易实现的.实现typedef int *SINGLETON; /* 定义自己的类型 */SINGLETON *singleton = NULL;SINGLETON *get_singleton(void){ if (转载 2016-12-23 10:01:08 · 226 阅读 · 0 评论 -
socket通信之心跳
场景在TCP长连接通信时一般会使用心跳机制;原因心跳是用于判断是否掉线的. 只要连着的时候就会持续每隔一小会发一个心跳包,服务器如果多久没收到就判断你已经掉线了. 之所以需要心跳包而不直接判断socket的联通状态,是因为在网络上有大量的连接缓存设备(比如电信局的交换机,比如一些硬件防火墙),这些设备会保存连接一段时间(几秒到十几分钟都有)举个例子 A客户端连接着B服务器 实际上是原创 2016-12-27 14:08:55 · 4515 阅读 · 0 评论 -
select模型
在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常) •我们要等待多长时间。(我们可以等待无限长的时间,等待固定的一段时间,或者根本就不等待) 从 sel转载 2016-08-25 16:45:52 · 318 阅读 · 0 评论 -
多线程之间共享的资源有哪些
课本的说法:进程是资源分配的基本单位;线程是系统调度的基本单位。平时我们写的程序都是作为线程运行的;进程可以看做是包括一系列线程和资源的统称;一个进程至少包括一个线程(主线程,进入main函数时产生的);在其中可以创建其它线程,也可以不创建。同一进程间的线程究竟共享哪些资源呢,而又各自独享哪些资源呢?共享的资源有a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地转载 2014-11-20 17:26:55 · 2518 阅读 · 0 评论 -
简单Liunx线程池
大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数非常频繁,那么服转载 2015-06-17 18:04:29 · 246 阅读 · 0 评论 -
epoll简介
Epoll是Linux内核为处理大批量句柄而作了改进的poll。要使用epoll只需要这三个系统调用:epoll_create(2), epoll_ctl(2), epoll_wait(2)。它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),在2.6内核中得到广泛应用,例如LightHttpd。转载 2015-09-10 22:54:17 · 253 阅读 · 0 评论 -
内存对齐与补齐
首先我们先看看下面的C语言的结构体:[cpp] view plaincopyprint?typedef struct MemAlign { int a; char b[3]; int c; }MemAlign; typedef struct MemAlign{ int a; char b[3]; int c转载 2014-11-20 17:51:06 · 407 阅读 · 0 评论 -
Ubuntu 下使用命令行安装QT
在Terminal中输入: sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer转载 2014-11-19 18:49:17 · 2991 阅读 · 0 评论 -
使用popen和system阻塞进程的区别
popen和system都可以执行外部命令。 popen相当于是先创建一个管道,fork,关闭管道的一端,执行exec,返回一个标准的io文件指针。 system相当于是先后调用了fork, exec,waitpid来执行外部命令 popen本身是不阻塞的,要通过标准io的读取使它阻塞 system本身就是阻塞的。 最近写的程序,要求进程在调用的外部命令运行完毕原创 2014-11-19 13:50:32 · 16854 阅读 · 0 评论 -
linux send与recv函数详解
1 #include 2 ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);3 ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);recv 和send的前3个参数等同于read和write。flags参数值为0或:转载 2014-11-10 00:08:41 · 294 阅读 · 0 评论 -
用GDB调试程序(一)
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的转载 2014-11-09 11:35:23 · 259 阅读 · 0 评论 -
SQL的内连接与外连接
在oracle的SQL语句常用的连接有内连接(inner join),外连接(outer join)等,内连接又包括等值连接,非等值连接,自连接;而外连接又分为左连接和右连接。其中默认的是内连接的等值连接。 为了方便我们创建两张最简易的表A、B,具体的表结构参看下面,来分析内连接与外连接的区别 图1转载 2014-11-20 23:54:34 · 284 阅读 · 0 评论 -
GDB调试指令
1. 编译2. 启动:gdb test // test为可执行文件原创 2014-11-09 11:45:13 · 310 阅读 · 0 评论