![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux C
文章平均质量分 67
松哥是好人
嗯哼
展开
-
gtk+安装与遇到的一些问题
因近涉及到界面程序需要安装gtk+,上网找了一些东西,比如《gtk+安装步骤》,对着做时也碰到一些问题,在此记录下来安装前要确定各软件的版本,有些版本太老会导致后续版本安装失败,最懒的方法是都下载最新的 http://ftp.acc.umu.se/pub/gnome/sour原创 2011-10-08 12:39:07 · 2403 阅读 · 0 评论 -
终端控制--termios结构
LINUX程序设计第三版 5.4节一.termios是在POSIX规范中定义的标准接口,通过设置termios类型的数据结构中的值和使用一组函数调用,我们可以对终端接口进行控制可用来调整终端行为的操作模式:输入模式输出模式控制模式本地模式特殊控制字符最小的termios结构典型定义:#include struct termios{ tcflag原创 2012-04-16 10:34:09 · 1193 阅读 · 0 评论 -
termios的例子
linux程序设计 5.4节先看一个menu.c函数#include #include #include char *menu[] = {"a - add new recode", "b - delete recode", "q - quit", "NULL"};int getchoice(char *greet, char *choices[], FILE *in, FI原创 2012-04-16 11:13:20 · 827 阅读 · 0 评论 -
两个内存调试工具
一.动态内存分配是一个很容易出现程序漏洞的领域,且一旦出错不易查找.这些错误通常由两种原因引起:1.指针malloc()分配的内存的指针值发生变化,又没有别的指针指向它,那么这块内存在程序退出将变得无法访问.2.在一个已分配的内存块前或后写数据,很可能会损坏malloc函数库用于记录分配情况的数据结构.出现这种情况后,过一段时间后,再调用malloc或free都可能失败而引起程序崩溃,要找原创 2012-04-17 17:21:19 · 3778 阅读 · 0 评论 -
文件锁
文件锁可用于实现多用户多任务共享数据linux提供两种方法实现文件锁定:1.以原子操作的方式创建一个文件,我们称之为锁文件,当这个文件被创建后,不允许其他进程再创建同名文件2.第二种方法允许程序锁定文件的一部分,从而可以独享对这部分内容的访问,这种方法被称为区域锁定#include int fcntl(int fildes, int command, ...);fcntl(原创 2012-04-17 11:42:08 · 756 阅读 · 0 评论 -
子函数中为调用者分配内存的一些理解
<!--p {margin-bottom:0.21cm}-->典型的例子有四个,其中一个是错误的,先说错误的情况1.错误的例子:intfunc(char *p){if(NULL == (p = (char *)malloc(128)) );{retuen-1;}return0;}在主函数中调用:...char*p0 = N原创 2012-07-12 10:22:20 · 3951 阅读 · 2 评论 -
浅析malloc()的实现方式
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的转载 2012-07-12 08:45:52 · 836 阅读 · 0 评论 -
小窍门:创建超长链表时加一个特殊头节点优化创建速度
#include#include#include#define MAX_LENGTH 100000int i = 0;struct _Token;typedef struct _Token{ int id; struct _Token *next;}Token;/* Token池管理,防止内存泄漏,优化创建链表速度 *原创 2012-07-16 09:54:41 · 1199 阅读 · 0 评论 -
GDB调试精粹及使用实例
一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args 命令就可以修改转载 2012-02-01 16:05:59 · 491 阅读 · 0 评论 -
socket套接字 学习笔记一
教材:《linux程序设计第三版》1.流程简述 服务端: (1).首先,服务器应用程序用系统调用socket来声明二个套接字描述符;并用其中一个来为服务器创建一个未命名的套接字,它是系统分配给该服务器的一个类似文件描述符的资源,且不能被其他进程共享。 (2).接下给套接字命名,指定套接字地址。 (3).创建套接字队列,用于保存未处理的请求。 (4).接收客户端的连接原创 2011-11-18 15:17:16 · 2148 阅读 · 0 评论 -
linux进程复习笔记
一.进程就是一个运行着一个或多个线程的地址空间加上所需的资源。他由代码,数据,变量(占用着系统内存),打开的文件描述符和环境组成。二.普通进程pid由2到32768,init进程pid是1 ,他是所有进程的祖先,负责管理其他进程。三.进程结构进程neil和rick共享grep代码和C库函数,这两段代码被以只读方式从磁盘加载到内存中,可以被多个进程共享。两个进程的数据段和原创 2012-07-27 10:52:10 · 758 阅读 · 0 评论 -
void (*signal(int sig, void (*func) (int))) (int)理解
1.signal( int sig, void (*func)(int))signal是一个函数,有2个参数,第一个是int类型,第二个参数是一个函数指针2.void (*signal(int sig, void (*func) (int))) (int)signal仍然是一个函数,他返回一个函数指针,这个指针指向的函数没有返回值,只有一个int类型的参数3.简化:typede原创 2012-12-11 10:39:00 · 6411 阅读 · 4 评论 -
时间与日期
通常确定时间和日期对一个程序来说是很有用的,程序可能希望记录运行时间.或者在某一时间后改变运行方式.例如一个游戏可能需要玩家在倒计时内完成某个任务所有的UNIX系统都使用同一时间和日期起点:格林威治时间(GMT)1970年1月1日.而MS-DOS纪元开始于1980年.时间通过一个长整型的预定义类型time_t来表示,它和其他时间相关函数在time.h中定义.通过time_t time(原创 2012-04-12 13:32:48 · 823 阅读 · 0 评论 -
glib库简单计时器的实现
#include #include #define INTERVALS 10 //间隔10ms#define COUNTER 1000 //计时间隔数GMainLoop *loop;gint count = COUNTER;gboolean callback(gpointer arg){ count--;原创 2012-04-12 13:37:08 · 750 阅读 · 0 评论 -
静态库和共享库的基础知识
库是一组预先编译好的函数集合,这些函数需要按照可重用的原则编写,这些函数通常是有关联并执行同一项任务,比如屏幕处理函数库curses和nsurses库.标准系统库在/lib和/usr/lib中,编译器会自动找到.除此之外的库在使用时需要指定完全路径或用-L/路径和-l标识静态库和动态库:静态库和动态库是两种共享程序代码的方式,它们的区别是静态库在程序的链接阶段被复制到程序中,程序执原创 2012-04-11 09:45:15 · 1618 阅读 · 0 评论 -
ubuntu安装eclipse
ubuntu安装eclipse 有两种安装方法,第一种,通过ubuntu自带的程序安装功能,安装Eclipse,应用程序,Ubtuntu软件中心,搜索eclipse安装即可 第二中,终端安装,sudo apt-get install eclipse,转载 2011-10-09 10:26:05 · 1483 阅读 · 0 评论 -
套接字 学习笔记二
主要是网络套接字笔记 linux平台1.使用网络套接字,通常要先用一个未被使用的端口(大于1024-小于它的端口是系统保留端口,且之前该端口没有在/etc/services中列出)。如果有足够的权限,可以将自己的服务端口添加到/etc/services文件的已知服务列表中,并为该服务分配一个服务名,这样用户也可以通过服务名而不是端口号来访问服务端程序。 #include struct原创 2011-11-18 17:47:28 · 713 阅读 · 0 评论 -
套接字 学习笔记三 select函数
编写linux应用程序时,经常会遇到需要检查好几个输入状态才能确定下一步行动的情况,这种情况可称之为忙等待。在单用户系统中运行一个忙等待是可以接受的,它不停地扫描输入设备看是否有数据,如果有数据到达才读取它。这种做法很耗cpu时间。select函数(这里函数又称调用、系统调用)检查一个由多个文件描述符组成的集合;如果集合中有描述符处于输入、输出、出错状态,select就返回处于这些状态的描原创 2011-11-21 14:45:07 · 806 阅读 · 0 评论 -
套接字 学习笔记四 书本例子
1.客户端程序#include#include #include #include #include #include #include int main(){ int sockfd; int len; struct sockaddr_in address; int result; char ch[255]原创 2011-11-21 14:46:44 · 714 阅读 · 0 评论 -
apache2 c module
【环境准备 - 按照Apache2及Module Dev】在Ubuntu的控制台中输入:apt-get install apache2 apache2-threaded-dev注意:安装后,apache2路径在/usr/lib/apache2下,而Module开发工具在/usr/bin下。apache2配置文件在/etc/apache2下,而工作路径在/var/www下环境验证转载 2011-12-19 16:36:35 · 1190 阅读 · 0 评论 -
进程通信--进程管道
进程间通信的几种常用方式:管道、命名管道、信号、信号量、共享内存、消息队列、套接字。管道( pipe ):一种半双工的通信方式,数据只能单向流动且只能在具有共同祖先的进程间使用。命名管道 (name pipe):也是一种半双工的通信方式,但他允许不相关进程间的通信。信号( sinal ):一个进程通过信号通知其他进程某事件已经发生,其他进程的反应如何及何时反应他都不管。信号原创 2011-12-26 13:33:06 · 1750 阅读 · 0 评论 -
不相关进程间通信--命名管道(FIFO文件)
命名管道是一种特殊类型的文件(FIFO),可以完成两个不相关之间的通信。它在文件系统中以文件名的方式存在,但行为却和一般的管道相似。一.创建FIFO在程序中,可以使用两个不同的函数调用创建:#include #include int mkfifo(const char *filename, mode_t mode);int mknod(const c原创 2011-12-26 16:40:21 · 2199 阅读 · 0 评论 -
使用gdb调试段错误(segment fault)
原文位置 http://www.unknownroad.com/rtfm/gdbtut/gdbsegfault.html 我们打算使用gdb去解决为什么下面的程序(文件为segfault.c)引起了段错误的问题。下面的这段程序是从用户那里读入一行文本字串然后显示在屏幕上。然而,如下当前的程序并不会如期执行...[cpp] view plaincopyprint?转载 2012-02-01 16:32:47 · 903 阅读 · 0 评论 -
运行galde编写的UI程序时报错:libglade-WARNING **: could not find signal handler 'gtk_reset'.
解决方案1: 在GCC编译命令中加入-export-dynamic,如: gcc test.c callbacks.c -o test `pkg-config --libs --cflags libglade-2.0 ` -export-dynamic 解决方案2: 在GCC编译命令中使用pkg-config加入库gmodule-export-2.0,如:转载 2012-02-07 09:54:05 · 1633 阅读 · 0 评论 -
系统调用和系统库函数的一些基础知识
文件linux中文件具有特殊意义,它们为操作系统服务和设备提供了一个简单统一的接口,在linux中,几乎一切都是文件.我们可以像使用文件那样使用磁盘,串行口,打印机和其他设备,大多情况下,只需要五个基本系统调用函数便可操作这些硬件:open(),close(),read(),write(),ioctl().除了本身内容外,文件还有一个名字和一些属性,例如可读,所属用户等管理信息,这些信原创 2012-04-11 11:17:38 · 1030 阅读 · 0 评论 -
send或者write socket遭遇SIGPIPE信号
send或者write socket遭遇SIGPIPE信号(转)转自:http://linux.chinaunix.net/techdoc/net/2008/10/10/1037290.shtml当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个转载 2012-12-11 10:16:43 · 6256 阅读 · 1 评论