Archive for 'programing'

在g_sigal_connect系列函数中,有时候我们需要给CALLBACK函数传入多个参数,如何实现呢?很简单,定义一个结构体即可。

简单举例:

typedef struct _tran_para{
int i;
float f;
char c;
char *str;
} tran_para;

tarn_para * mutli_para;

g_signal_connect(G_OBJECT(button),”clicked”,G_CALLBACK(callback_fun), mutli_para);

这样,你就可以传递多个参数给CALLBACK函数了。

Tags: ,

linux下搭建j2me开发环境

其实我没有接触过j2me开发,只是受朋友所托,帮他在ubuntu上搭建了j2me的开发环境,然后写了一份文档给他。

因为朋友没有接触过linux,所有这份文档写得很入门。

1. 所需的软件包: jdk 1.5 eclipseme Myeclipse Wireless Toolkit

2. 安装步骤:

› Continue reading…

Tags: ,

原文地址:http://www.ibm.com/developerworks/cn/linux/l-diffp/index.html

在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具就完全可以完成代码的简单备份和升级工作。

diff以”行”为单位比较两个文本文件(也可以是目录比较),并将不同之处以某种格式输出到标准输出上;patch可以读入这种输出,并按照一定指令使源文件(目录)按照目标文件(目录)更新。Linux内核源码就是按照这种方式保持更新的,我们在www.kernel.org上可以下载到最新内核的patch文件的bzip2包。本文以gnudiffutils 2.7和patch 2.5为例介绍diff和patch工具的使用。

› Continue reading…

Tags: ,

#include <gtk/gtk.h>

static void destroy (GtkWidget*, gpointer);
static gboolean delete_event (GtkWidget*, GdkEvent*, gpointer);

int main (int argc, char *argv[])
{
GtkWidget *window, *label;

gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), “Hello World!”);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
gtk_widget_set_size_request (window, 200, 400);
gtk_window_move (window,200,200);

g_signal_connect (G_OBJECT (window), “destroy”,
G_CALLBACK (destroy), NULL);
g_signal_connect (G_OBJECT (window), “delete_event”,
G_CALLBACK (delete_event), NULL);

label = gtk_label_new (“Hello World”);
gtk_label_set_selectable (GTK_LABEL (label), TRUE);
gtk_label_set_text(GTK_LABEL (label),”testing…”);

gtk_container_add (GTK_CONTAINER (window), label);
gtk_widget_show_all (window);

gtk_main ();
return 0;
}

static void destroy (GtkWidget *window, gpointer data)
{
gtk_main_quit ();
}

static gboolean delete_event (GtkWidget *window, GdkEvent *event, gpointer data)
{
return FALSE;
}
今天看了会gtk+方面的信息,按照原先的计划上半年是要学习gui编程的,那就从今天开始吧。

Tags: ,

遍历目录的简单例程

#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>

void printdir(char *dir,int depth)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;

if ((dp=opendir(dir))==NULL) {
fprintf(stderr,”Cannot open directory:%s \n”,dir);
return;
}
chdir(dir);//打开目录
while ((entry=readdir(dp))!=NULL) {
lstat(entry->d_name,&statbuf);
if(S_ISDIR(statbuf.st_mode)) {
if (strcmp(“.”,entry->d_name)==0 || strcmp(“..”,entry->d_name)==0)
continue;
printf(“%*s%s/\n”,depth,”",entry->d_name);//打印目录名
printdir(entry->d_name,depth+4);//递归
}
else printf(“%*s%s\n”,depth,”",entry->d_name);//打印文件名
}
chdir(“..”);//当前目录扫描完毕后返回上一级目录
closedir(dp);
}

int main()
{
printf(“Directory scan of /home:\n”);
printdir(“/home/rem1x/project”,0);
printf(“\nDone\n”);

exit(0);
}

安装MinGW和MSYS

今天和一位朋友聊天,了解到他现在win平台用eclipse来学习编程,于是我也打算安装一个试试。google了之后发现在win平台上用eclipse开发c/c++程序需要c/c++编译器,而一般大家会安装mingw,当然也可以安装cygwin,不过cygwin的安装包相对来说大很多,而mingw的软件包加起来总共也就只有20多m。

› Continue reading…

Tags: ,

暑假以来都没有写过程序了,本来打算是要把数据结构的一些重要的算法复习一遍,一个不小心就休息了将近10天,这10天里只是零星看了一些琐碎的东西。

我想很多人跟我一样,到了假期整个人就有点懒,虽然觉得时间慢慢流逝是一种极大的浪费,可就是没有自制力。计划还是要执行,不然到暑假结束自己又要”哭”了。以前用gedit来写代码,因为程序都比较简短,也没有感觉出不适应,现在我想我应该熟悉vim来写,很多人都这么建议的。于是我打开了vim,才发现用起来不那么习惯,现在发现vc为我们准备的开发环境太安逸了。写了没几行代码就没有动力了,:wq之后开始google,这才对vim的使用有了一个大概的了解(以前只是学习了它的一些快捷键和命令),大虾们都说vim不是一天两天就能上手的,并且表示上手的过程会有些痛苦,但是当你真正熟悉使用之后,你会发现vim是那么的强大。看来我要走的路还很长啊!

说真的,在linux下面写程序不是很习惯,有一种压抑感,可能是用惯了vc的缘故(其实vc也没用过多久 – -#),我真的适合做程序员吗?

Vim Logo

今天静下心来学习了vim的使用,

什么是vim? 首先,它是一个编辑器。

其他的我不好多说,因为我才开始使用它。关于它的说明可以参考这里,很详细:

http://www.vim.org/6k/features.cn.txt

› Continue reading…

Next posts » Back to top