文章归档

停止打包deb包声明

人懒了,现在去实习,每天都在忙,也没时间去专研怎么wine。 今天发现深度出了一个 Deepwine 计划,感觉很好,而且他们已经实现了 TM2009beta 模拟运行,如果还有需要QQ以及其他的东西,wine的东西,可以关注此贴。 http://bbs.deepin.org/thread-1808167-1-1.html 我呢,以后就不会再更新有关腾讯的 wine deb 包了,而且我个人也经常使用 webqq 的,为了在工作上赶上去,而且学习更多有关编码的事情,所以,,啰哩啰唆的,反正就是写篇文章声明一下而已,大家不要认为是 TX 给我的压力哦,我还希望Deepin吧国内的linux带的更好。 接下来的学习工作,把公司的任务,一个系统搞定,自学 C和GTK的linux编程,因为有了公司带的思路,现在要尝试使用图形化工具开发gtk界面,希望自己能学到更多的东西,JQ与wordpress的也希望能够学会,以后自己做一下wordpress的主题,公司的实习工作,并不难,纯粹代码的工作并不多,多是基于业务流程,在开发环境的二次开发,应该会有时间去学习纯代码的东西。 公司总经理说,我们公司,没有一个程序员能够走得出去,应该我们都是二次开发,对代码编辑量较少,没能系统学会代码知识,所以我希望自己能够自行学习C+GTK编程的拉。 这文章写得很乱,没有思路,因为现在中午,刚看了Deepwine计划就随感而发,忘大家支持哈。

图形界面开发语言比较

为什么写这个文章,其实都是我自己的问题,真的发现自己很笨,老师说,C语言是拿来开发底层数据通信的,比如网络开发,前两天写的《Gappproxy ubuntu 客户端》使用的是C+GTK图形库制作的,因为还想把这个程序放到通知区域去,所以查找资料,找到如下 wiki https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators 。 这个wiki里面,有开发 ubuntu 通知区域的几种语言方式。我一一列出来。 以下是C语言实现方法: #include <gtk/gtk.h> #include <libappindicator/app-indicator.h> static void activate_action (GtkAction *action); static GtkActionEntry entries[] = { { “FileMenu”, NULL, “_File” }, { “New”, “document-new”, “_New”, “<control>N”, “Create a new file”, G_CALLBACK (activate_action) }, { “Open”, “document-open”, “_Open”, “<control>O”, “Open a file”, G_CALLBACK (activate_action) }, { “Save”, “document-save”, “_Save”, …

>>Read more

C编程For循环的一点见解

今天正在学一个字符串处理函数,用到许多 for 循环,其中,我写了两个 for 语句循环如下: for(i=0;i++;i<max) for(z=0;z++;buffer[i][j]!=’:') 在这两个语句编译时,提示出错信息如下:翻译过来就是 警告:语句没有影响 warning: statement with no effect 很纳闷,语句不是对的吗,都是为什么会初小没有影响效果呢?上网搜一下,于是看到了 for 循环的原型,如下: for (expr1; expr2; expr3) { statement } 其中的 expr1 为条件的初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。 原来错在,这三个 expr 的顺序不能乱,初始值在前,判定在中,改变变亮语句在后,而我的循环中,就是将这些颠倒了,从 i++ 与 z++ 中,总以为是循环先使用他们的值,再在当次循环结束的时候 +1 。判断可以随便放。与 for 循环原型不符。 于是我将循环改为如下,立即解决问题 for(i=0;i<max;i++) for(z=0;buffer[i][j]!=’:';z++) 记下这篇文章,是要让自己知道,for 循环的语句顺序一定不能变动,不然,即使你觉得是对的,可是写出来的程序,还是不能按照你的意思去处理。

Linux编程:给GTK程序添加任务栏图标

今天在写 Linux 下的 Gappproxy 图形界面,运行后发现,任务栏是难看得 DOS 默认图标,很难看,上网搜了一下,如何添加任务栏图标,现在将代码转换过来,做点小解释吧。 #include <gtk/gtk.h> GdkPixbuf *create_pixbuf(const gchar * filename) { GdkPixbuf *pixbuf; GError *error = NULL; pixbuf = gdk_pixbuf_new_from_file(filename, &error); if(!pixbuf) { fprintf(stderr, “%sn”, error->message); g_error_free(error); } return pixbuf; } int main( int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), “icon”); gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); gtk_window_set_position(GTK_WINDOW(window), …

>>Read more

Linux编程:创建子进程

这几天看了一下,进程控制和线程控制还有信号以及信号处理,写的很好,但是有的还是很难理解,下面写写如何创建子进程。 我们先来看看进程是什么,进程是一个动态的实体,是程序的一次执行过程,说通俗点,就是运行一个程序的时候,就创建了一个这个程序的进程。 但是有时候,不是一个程序就能解决问题,所以我们必须得创建子进程,去做其他事情,让主进程管理着下面的各种子进程。所以今天来写写创建进程的的代码, Linux下,创建子进程的函数是 fork 函数,使用以下命令获得该函数的声明: man 2 fork #include <sys/types.h> #include <unistd.h> pid_t fork <void> 一般情况下,函数最多又一个返回之,但 fork 函数非常特殊,他有两个返回值,即调用一次,返回两次。成功调用 fork 函数后,当前进程实际已经分裂为两个进程,一个是原来的进程,称为父进程,另一个是刚刚创建的子进程。父子进程再调用 fork 函数的地方分开,fork 函数返回两个值,一个返回给父进程,返回值是刚刚创建的子进程的 ID,另一个返回给子进程,返回值是 0。 下面看看创建子进程的例子。 #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> int main(void) { pid_t pid; printf(“Process Creation Studyn”); pid = fork(); switch(pid) { case 0: printf(“Child process is running,CurPid is …

>>Read more

Linux编程:实现Shell环境(二)

参考书本:《Linux C 编程实战》 首先说明,这些代码,是我在学习之后共享出来的,并没有完全的自创,但是对于学习 Linux 编程非常又帮助。这篇文章的实例是为了加强对进程控制的编程强化,学过进程控制,却无法自己控制进程的,读懂这篇文章,你就会对进程控制的全部过程有所了解,但是,你必须学好进程控制的基础知识。 接上篇 Linux编程:实现Shell环境(一) 本文给出上篇程序的代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> #include <fcntl.h> #include <sys/stat.h> #include <dirent.h> #define normal 0 /* 一般的命令 */ #define out_redirect 1 /* 输出重定向 */ #define in_redirect 2 /* 输入重定向 */ #define have_pipe 3 /* 命令中有管道 */ void print_prompt(); /* 打印提示符 …

>>Read more

Linux编程:实现Shell环境(一)

参考书本:《Linux C 编程实战》 首先说明,这些代码,是我在学习之后共享出来的,并没有完全的自创,但是对于学习 Linux 编程非常又帮助。这篇文章的实例是为了加强对进程控制的编程强化,学过进程控制,却无法自己控制进程的,读懂这篇文章,你就会对进程控制的全部过程有所了解,但是,你必须学好进程控制的基础知识。 一、环境介绍 打开Linux终端,会看到这样的一个提示符: name@name-desktop:~$   这个提示符,其实就是Shell环境提示符,name代表你的用户名,name-desktop代表计算机名。~$代表当前Shell环境的根目录在用户的主目录。 这篇文章编程所写的,就是要建立这样一个Shell环境,用于解释用户输入的命令,并运行程序。由于只是简单的Shell环境,我们就让这个环境,能够解释我们并运行ls命令。 二、功能介绍 支持 ls 命令 带1到多个参数的命令 带一个输出重定向的命令 带一个输入重定向的命令 带一个管道的命令 后台运行符&可加在以上各个命令的最后面。 输入exit和logout推出shell环境。 三、错误处理 输入错误的命令格式报错 输入不存在的命令报错 四、程序主函数流程图 五、关键函数的功能及说明 void print_prompt()   该函数只是简单的打印Shell环境提示符,如:MyShell$ void get_input(char* buf)   该函数用来获得一条用户输入的待执行命令,参数buf用于存放输入的命令,我们还可以设定命令长度,如大于256个字符,则终止程序。 void explai_input(char *buf,int *argcount,char arglist[100][256])   该函数用来解析buf中存放的命令,把每个选项存放在arglist中。 do_cmd(int argcount,char arglist[100][256])   该函数用来执行arglist中存放的命令,argcount为待执行命令参数个数 int find_conmand(char *command)   该函数的功能是分别在当前目录下、/bin、/usr/bin目录下查找命令的可执行程序。 六、程序代码 由于程序过长,我将程序代码写到另一篇日志里面去,如果可以两个窗口一起看,对比程序函数,会比较好。 …

>>Read more

Linux编程:打造自己的ls命令

参考书本:《Linux C 编程实战》 首先说明,这些代码,是我在学习之后共享出来的,并没有完全的自创,但是对于学习 Linux 编程非常又帮助。 1、简单介绍 Linux 中, ls 命令将每个由 Directory 参数指定的目录或者每个由 File 参数指定的名称写到标准输出,说得通俗点,就是显示目录下的目录与文件信息。常用的参数又 -a 与 -l 参数。-a 参数表示显示隐藏文件,-l 参数表示显示文件的详细属性。 实现 ls 命令,我们必须知道这个函数的流程。 开始 | 解析输入参数 | 输入参数中是否有目录或文件 —是 |否 | 打印当前目录的文件信息 打印参数中每个目录或文件的信息 | | 结束 结束 整体流程,从上到下,会变为两条。 2、关键函数 (1)void display_attribute(struct stat buf,char* name) 该函数用于打印文件名 name 的文件信息 (2)void display_single(char* name) 该函数用于输出文件的文件名,若命令中没有 -l 参数,则输出文件名时要保证上下对其 (3)、void display(int …

>>Read more

利用readdir函数,读取目录信息

在 Linux 系统下,权限设置很详细,不想 windows 的文件系统,文件可以随时访问。 在 Linux 中,只要对目录具有读权限,就可以获得目录信息。获取目录信息,主要分为3步: opendir 函数打开目录; readdir 函数读取目录信息; closedir 关闭已打开目录。 我们先看一下他们的函数原型: 1、opendir #include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name); DIR *fdopendir(int fd); 2、readdir #include <dirent.h> struct dirent *readdir(DIR *dirp); int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); 3、closedir #include <sys/types.h> #include <dirent.h> int closedir(DIR *dirp); opendir 用来打开参数 name指定的目录,并返回 DIR …

>>Read more

使用stat函数,获取文件属性

Linux的终端下面,通过以下 ls 命令可获得文件属性,但是在程序中,需要获得文件属性,就需要使用 linux 的 stat/fstat/lstat 函数获得属性了。 我们先看看他们的函数原型:通过命令 “man 2 stat” 获得 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf); 这三个函数的区别是: stat 用于获取有参数 file_name 指定的文件名的状态信息,保存在参数 struct stat *buf 中。fstat 于 stat 的区别在于 fstat 是通过文件描述符来指定文件,也就是 通过 open 函数所返回获得的 …

>>Read more