顯示具有 freebsd 標籤的文章。 顯示所有文章
顯示具有 freebsd 標籤的文章。 顯示所有文章

星期五, 4月 18, 2008

utmpx

在大部分的linux下,是可以從"/var/run/utmp" 這個路徑得知現在使用這台伺服器的使用者資訊,資訊是開放任何人可讀,不過在Mac OS 10.5以後不支援這個檔案,而改採用NetBSD的utmpx,故資訊可從"/var/run/utmpx"這個檔案讀到。寫了一小段測試碼如下

#include <stdio.h>
#include <utmpx.h>
int main(){
struct utmpx utmpx_entry;
FILE* fp = fopen("/var/run/utmpx", "r");
while(fread(&utmpx_entry, sizeof(struct utmpx), 1, fp)>0){
printf("%s\t%s\t%s\n", utmpx_entry.ut_user, utmpx_entry.ut_id, utmpx_entry.ut_line);
}
return 0;
}

事實上我覺得使用起來沒什麼差別,不過細細比較utmp.h和utmpx.h之後,會發現struct utmpx記載了更多資訊,可能更符合現在的作業系統設計,畢竟現在的作業系統不是只有單純的command line了,而一個xwindow也是一個terminal,所以我覺得新增這些資訊還算蠻合理的。

---
事實上這篇重要性不大XD

星期四, 4月 17, 2008

測試

今天中午醒來,思考,如果unix system call都是C 寫成的,是否有辦法用class包起來呢,於是寫了一個小小的class測試一下。

class FileAttribute{
public:
FileAttribute(const char* dir, const char* file){
name = string(file);
path = string(dir) + "/" + name;
stat(path.c_str(), &buf);
};
FileAttribute(string& dir, string& file){
name = file;
path = dir + "/" + file;
stat(path.c_str(), &buf);
};
const char* ab_file_path(){ return path.c_str(); };
const char* file_name(){ return name.c_str(); };
bool is_file(){ return !S_ISDIR(buf.st_mode); };
bool is_dir(){ return !is_file(); };
unsigned int size(){ return buf.st_size; };
private:
string path;
string name;
struct stat buf;
};

看起來成效不錯,其實效率很差,多一層包裝,就要浪費掉很多時間在此包裝上,不過如果在發展大型程式時,還是有其包裝的必要。
---
我真無聊,不過我喜歡XD

星期日, 3月 30, 2008

最近

催生文件告一段落之後,接下來便是開始構築整個程式架構的時候了,不過今天不想動工,於是便有偷懶的一天。其實也稱不上偷懶,只能說是可以開心做著自己的事。

喜歡的書Advanced Programming in the UNIX Environment 2/e 終於到了自己手上,雖然ycma說,每個系統上面的system library有點不同,還是用man查詢相關資訊會比較好,我不反對,不過就對於一個初學者的自己而言,我想還是有必要把書想翻的翻一翻,對於整個system library有個概觀是比較好一點的,雖然書也厚了一點就是(笑)。

最近也必需得習慣Visual Studio .net 2005,我想還是會有這一天的到來,上課會用到,專題也會用到,我總是死命的在拖,不要用到這一套軟體,不過還是有一天會用到就是了,遇到了就好好學,然後學完了再跳回bsd的懷抱XD

念書的習慣慢慢的在開始,會有進展的。

---
超高速齒輪

星期三, 3月 12, 2008

MacPorts

搞了很久的OpenSource軟體才知道MacPorts這個軟體很重要。

顧名思義,用相同FreeBSD思維的方式,提供給Mac OSX 下可以快速且順利安裝OpenSource的方式,而DarwinPort是早期的名字。目前出到1.6 (Leopard, Universe),而官方網站提供了約4500個軟體套件的相關說明。安裝方式很簡單,只需要找到package name,在command line(終端機)下輸入(這邊以安裝boost為例)sudo port intall boost,如果想要知道MacPorts有沒有更新,就輸入sudo port -d selfupdate

若想要更新已安裝的軟體則 sudo port -d selfupdate
sudo port upgrade installed
就可以把安裝的更新了。



結果我搞了很久的apache, mysql, php5 瞬間被解決,gocr也有解,算的上是相當方便XD。

---
在還沒有找到之前我都乖乖的重新編譯後安裝XD

星期日, 3月 09, 2008

有感

看著efang玩ubuntu linux,我決定,我還是玩....FreeBSD好了,我不要沒事每天都要搞Kernel和library不一樣時的痛苦,而且Mac OSX也是BSD Kernel,一個名叫Darwin的Kernel,查了資料才發現原來Apple有釋出source code。不過FreeBSD的相對中文資料也是比較少,沒關係,看英文也不錯,最近感覺到自己的英文退步到一個鳥程度XD。

多多吸收新東西總是好的。

---
雖然這很花時間XD