Jan 10
因为在那个触摸屏上打字太痛苦了,于是决定安装一个openssh-server。
查看了一下/etc/apt/sources.list,内容只有一行
引用
deb http://ports.ubuntu.com/ karmic main universe restricted multiverse
原来是karmic,9.10了哇,真是与时俱进。直接用的官方源。
# sudo passwd root 随便给root设置一个简单的password
# su - 切换用户为root
#apt-get update 发现住处那个ooxx的长城宽带,连上去的速度大约是100B/s以内。很爽。

# apt-get update 带到公司再来,这已经是今天了=。=
# apt-get install openssh-server
openssh-server 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包, 要卸载 0 个软件包,有 80 个软件未被升级。

&*@$ 居然已经安装了,抑郁。
# /etc/init.d/ssh start
* Starting OpenBSD Secure Shell server sshd               [ OK ]

然后在台式机上打开SecureCRT连上去,用户名密码就用root的那个,然后看到这个提示符,表示登录成功啦
root@SmartQ:~#

于是就不用忍受终端下用触摸屏打字的痛苦了..

p.s. 顺便安装了一些东西:gcc g++ build-essential vim ctags cscope,然后写了个hello smartq,没问题,嗯。以后应该会有用的,哇哈哈。另外,发现机器上已经有perl和python了,真是好东西哇好东西。
再p.s. apt安装的时候会先下载安装包,会放在/etc/cache/apt/archieves,如果确定不会删了再装,可以把它们都删掉 #apt-get clean,或者可以备份到卡上,免得下次下载很痛苦。


update 1 @ 2010-01-17

1. 更新源用国内的这个,速度很快
deb http://ubuntu.srt.cn/ubuntu-ports/ karmic main restricted universe multiverse

2. 安装个lrzsz,然后用SecureCRT连上去以后就很方便了
# sudo apt-get install lrzsz
# sz 文件名
可以下载到电脑上
# rz -e 回车
在电脑上选择文件,传输上去
Jan 10

入手智器SmartQ V7 不指定

felix021 @ 2010-1-10 14:31 [IT » 硬件] 评论(4) , 引用(0) , 阅读(7361) | Via 本站原创
昨天到中关村去,鼎好A2574试用了3个小时的SmartQ V7,然后终于决定买下来,一个V7,一个布袋,送一个烂耳机,一共1530。其间还有些纠结,反正没有买到可用的USB网卡,也没有买到想买的USB充电线,小抑郁。回来后在当当上买了一个KingMax的SDHC, 16GB, class6, 230。也就是总共花了接近1800。

折腾了很久,Ubuntu很慢,除去这个问题的话 用起来还算比较happy,此外就是屏幕不够大,那个键盘就占了好大的空间,很囧。之后试着看能不能把它转过来。WinCE软件不少,折腾起来阻力,而且全是玩软件,太无聊了。Android一点都不好玩。

后面慢慢贴一些“研究成果”出来grin
Jan 7

apache, mod_cgi 不指定

felix021 @ 2010-1-7 20:40 [IT » 网络] 评论(1) , 引用(0) , 阅读(6589) | Via 本站原创
编译apache的时候默认应该是有mod_cgi的,如果不确定,可以加上--enable_cgi。

在httpd.conf里面增加(或修改,因为可能已经有这个东西了):
引用
ScriptAlias /cgi-bin/ /某路径/cgi-bin/
如果你修改了“某路径”,那么后面对应的Directory一节也应该对应修改
引用
<Directory "/某路径/cgi-bin">                                                  
    AllowOverride None
    Options FollowSymLinks #如果不放心,这里还可以加上一个ExecCgi选项。
    Order allow,deny
    Allow from all
</Directory>

下面是一个简单的C编写的cgi程序,gcc -o printall simple_cgi.c,把printall放在cgi-bin目录下面。然后访问:http://localhost/cgi-bin/printall,可以看到输出。特别注意一下,cgi不仅要打HTTP实体,还要打HTTP头信息。如果你实在懒得写,在实体前面加上一个回车就行了:) 否则你会看到apache的error_log里输出诸如"malformed header from script. Bad header="这样的错误信息。
#include <stdio.h>
#include <stdlib.h>

extern char ** environ;

int main ()
{
    int i;
    puts("Content-Type: text/plain\n\n");
    for (i = 0; environ[i] != NULL; i++) {
        printf ("%s\n", environ[i]);
    }

    if (strncmp("POST", getenv("REQUEST_METHOD"), 4) == 0) {
        char buf[1025];
        while (1) {
            fgets(buf, 1024, stdin);
            printf( "%s", buf);
            if (feof(stdin)) {
                break;
            }
        }
    }
    return 0;
}

特别点出一下,GET请求的query_string是在environ["QUERY_STRING"]里面,而POST请求的输入,是从stdin中读取。
Jan 4
在发现有atoi这个函数之后的一段时间里(converts a string to an integer, cppreference.com),每当我需要把integer转换成字符串的时候,我就会想当然地写上itoa,直到编译器告诉我,这个函数不存在。反复几次以后,我终于记住了没有itoa,记住了应该用sprintf(现在想想,是应该用snprintf才对)。直到今天我才意识到自己从来就没有仔细想过,为什么有atoi,却没有itoa。也许还是自己求知欲太低了。

原因其实很简单,简单地说,就是因为不好处理返回值。atoi, atof, atol等函数之所以可以在C标准库中存在,可以列出来的有两个必要条件:一,需求使然;二,返回值类型是基本类型,可以使用匿名变量传递。itoa之所以不在C标准库中,我觉得并不是没有需求,而是因为返回值是字符串,也就是char数组,处理起来比较纠结。

在C里面,字符串始终是个硬伤。如果非要设计这么一个函数,有三种可选的办法:

一,使用一个static的char数组(貌似printf就是这么做的吧)。这有2个问题,1是数组的长度是固定的(当然,简单处理的话可以认为int最多就那么几位,只要初始化某个足够的长度肯定就OK),2是每次调用会覆盖上次的结果,特别地,会导致非线程安全。

二,每次调用,在函数内部malloc一段空间,写入,返回该空间的首地址。存在问题是,分配的空间函数内无法自行释放,需要调用者安排一个free,而这个free是非常容易被忽略的,这就存在了潜在的内存泄漏风险。

三,要求传入一个分配好空间的指针,函数将转换结果写入。这样实际上就是sprintf的做法,重复造轮子。而且还要考虑内存越界访问的问题,再增加一个参数n,然后这就是snprintf做的事情....

综合起来的结果就是:太麻烦了,不实现。

最后,推荐云风的一篇文章,这里探讨了与以上内容比较相关的”一个 C 接口设计的问题“
http://blog.codingnow.com/2009/01/c_interface.html
分页: 3/3 第一页 上页 1 2 3 最后页 [ 显示模式: 摘要 | 列表 ]