'编程' Tag

  • Linux程序已运行实体的检测以及其PID的获得

    May 25, 2009

    程序中经常需要有这么一个功能:只允许本程序的单个实例运行,即不能多次运行一个程序。检测某个进程是否在运行,在shell中可以很轻松的用命令ps -A|grep xxx找出来,但对于程序来说,该怎么检测呢?我参考了aecium程序的方法:同样调用ps -A|grep xxx。也许会存在更先进的方法,比如dbus、系统信号量之类的技术,总之这个不会是最好的方法,不过且看看其技巧。 首先要获得当前进程的名字以便传给grep,一般通过main的argv[0]可得到运行时的程序名,不过要注意的是,通过路径运行的程序如./a.out,argv[0]也是./a.out的。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 [...]

  • 一个面向对象实现的银行家算法

    April 28, 2009

    最近完成学校《操作系统》课程的试验报告,其中的题目是用程序实现银行家算法。什么是银行家算法,这里就不详提了,具体参看Wikipedia-zh。 Wikipedia的页面里面有整个银行家算法的伪代码,加起来只有12行,很清晰地表达出整个算法的思想,然而如果你到别的地方看看一些具体的银行家算法实现,往往会被吓一跳(可以看看百度百科的词条)。 银行家算法本来并不复杂,只是其运算涉及向量、集合,实现起来还是花要一点功夫。我使用C++来实现银行家算法,为了实现和伪代码描述尽可能接近,重载对象的运算符等,最后整个算法的实现和伪代码没太大差别,也就20行的样子。 伪代码 while (P != ∅) { found = FALSE; foreach (p ∈ P) { if (Mp − Cp ≤ A) { A = A + Cp ; P = P − {p}; found = TRUE; } } if (! found) return FAIL; } return OK; C++代码 1 2 3 4 5 6 [...]

  • 继续CETQuery——C语言版

    March 2, 2009

    用C来做这个题目还真是截然不同的感觉,没有HTTPConnection,没有urllib,所有报文都得自己构建自己解析……更麻烦的是中文问题,不得不调用到系统库来进行解码…… 貌似这次最满意的一行代码是: char type = (id[9] - 1) ? '6' : '4';

  • CET终极查分程序 Java版

    February 26, 2009

    今天早上上了第一课《网络编程》,老师就知道无聊地吹……用Opera mini看绝影的小说(疯狂程序员)到下课。 原来这学期的网络编程主要是用Java,好像还没怎么写过Java的网络连接代码,想起早天的Python版本CETQuery,决定花两个小时弄弄,权当Java Hello World。 过程遇到的问题除了那些API的使用外,主要是Java的中文编码问题了。编写本地程序时,管你中文日文希腊文,因为Java用的是Unicode编码,通通支持。但这次是从网络读取的数据,其中的中文是GB2312编码的,直接显示就乱码给你看。Java和Python都有中文编码问题,虽说殊途同归,但他们的“问题”可是各具特色的,稍后准备撰文详其解决之道。 CETQuery-Java详细代码如下:

  • 一起学写Hello World

    February 13, 2009

    网上有流传着一些各种版本的Hello World,有些是不同语言的,有些是揭露C/C++这些可以“深深进入”其工作机制的特性的,比如“Hello World!”的N种写法,里面提到的不少东西需要去看“成人高钙奶粉”,Inside The C++ Object Model,我们学校图书馆好像有一本侯捷翻译的中文版,翻开过,头大。 该文最后有这么一个例子,叫Alien Say,比较冷。 #include <stdio.h> void alien_say(char * p) { while (putchar(*(p += *(p + 1) - *p))); } int main() { return alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0; } 假期在家计划整理出一系列这段时间以来学到的知识,利用各种技术来实现Hello World,大概有以下几篇: 进程、线程与本地Socket通信 其他进程间通信(系统信号、共享区、管道……包括1的方法) 利用UDP广播通信 TCP连接的通信(HTTP、FTP协议的实现)

Page optimized by WP Minify WordPress Plugin

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org