偶然於 7zipLZMA sdk 裡發現非常簡潔的 UTF-8/UTF-16 變換函數,連一般轉換成 Unicode 的中介動作也省去了。可惜它本身的解壓功能未能滿足遊戲裝載系統的要求,皆因 7zip 的 archive 格式不能以最少的資源去解壓 archive 裡的個別檔案。
以下源始碼引用 LZMA sdk 再加上本人所寫的額外錯誤偵測與註解,enjoy!

typedef byte_t unsigned char;
static const byte_t cUtf8Limits[] = {
0xC0, // Start of a 2-byte sequence
0xE0, // Start of a 3-byte sequence
0xF0, // Start of a 4-byte sequence

ryan0988 發表在 痞客邦 留言(0) 人氣()

劇情簡介:由【黑暗騎士】 、【全面啟動】導演克里斯多夫諾蘭監製、【三百壯士】導演查克史奈德所執導的全新超人電影。在這部電影中,超人(亨利卡維 飾演)將面對另外兩名同樣來自氪星的敵手,索德將軍(麥克山儂 )與費歐拉,其中最令影迷期待的是費歐拉這個仇視男性的角色,她的力量非但不在超人之下,精通近身格鬥技巧的她,甚至把超人打得無法還手,落荒而逃...

 

(這個劇情很窘...之前超人第二集不是就有這三個來自氪星的角色了嗎...現在是怎樣...同樣劇情只是換人演嗎)

(沒有露薏絲的照片來一張....超人吸引力立刻減一半)


ManofSteel-3

ManofSteel

man_of_steel_ver6

man_of_steel_ver8

MOS_poster_511_-_625

man_of_steel_ver4

ryan0988 發表在 痞客邦 留言(0) 人氣()

px_ften4139728008

(連恩大叔又出任務~這次是第二次)

picx_ften4139728003

(無聲無息繞背殺人法)

picx_ften4139728005

(男人間的決鬥...一對一)

picx_ften4139728006

(到夜店趴妹妹順便找情報) 

picx_ften4139728008

(連恩大叔是打電話問情報兼開槍的高手....一心二用厲害厲害)

ryan0988 發表在 痞客邦 留言(0) 人氣()

注意

Here you go.  拿去。(= Here you are.)

Here we go.  開始囉。
Here we are.  我們到囉。
Here we go again.  (壞事)又來了。
There you go again.  你老毛病又犯了。


Man, here we go again. I bet Claude's calling to borrow more money from me.
喔,又來了。我打賭克勞德要開口向我借更多錢了。
There you go again. You just jumped to conclusions.
你老毛病又犯了。你剛才又妄下結論了。

ryan0988 發表在 痞客邦 留言(0) 人氣()

大陸論壇上找到的分享之

Problem:


目的:試圖open一個文件,若文件不存在就建立它。
open(pathname, O_RDWR | O_CREAT,0666);就不行吗?为什麼好多資料上說要加O_EXCL,說是唯一單體的運動方式,不加難道就不是了嗎?不解

說的是,但目的是“試圖open一个文件,若檔案不存在就建立它。”再加這一句讓它返回一个錯誤有什麼用呢?如果檔案存在反而不能打開這個檔案,如果要測試檔案是否存在我只要一個O_EXCL不就行了。很多資料上都是O_CREAT | O_EXCL, 我實在不知道這樣做的用途何在?

Answer


哦,我還以為弄清楚了呢,結束帖子了。

設想這樣一個需求:某個任務要求只能單個進程執行,不能多個進程同時執行。
但是不能確保多個進程同時啟動,嘗試執行這個任務。

ryan0988 發表在 痞客邦 留言(0) 人氣()

劇情簡介:菲利浦狄克短篇小說"We Can Remember It For You Wholesale"改編,曾在1990年改編成電影「魔鬼總動員」,由阿諾史瓦辛格主演,此次是二度搬上大銀幕。

道格拉斯奎德(柯林法洛 飾演)是一名新殖民地的工廠工人,然而在植入晶片記憶的過程中,卻意外挖掘出他曾是一名間諜的身世內幕,只是他記不得他為哪一邊工作?

px_fTatm079500202

(1990的版本是由"阿諾史瓦辛格"領銜主演)

px_fTatm079500203

(阿諾在平常一直夢到關於"火星")

total-recall01

(未來士兵感覺都是參考星際大戰的裝扮...該邊那邊也要保護)

total-recall02

(未來世界的樣子...屋子在上面是顛倒的?)

ryan0988 發表在 痞客邦 留言(0) 人氣()

中文片名:聚魔櫃

hr_The_Possession_1

( 根據真實故事改編...有大法師的影子)

(其實只看海報的話有異形的feel)

possession_ver2  

劇情簡介:本片根據《洛杉磯時報》記者萊斯利高斯坦的報導「Jinx in a Box」改編而成。

描述克萊德布奈克(傑佛瑞迪恩摩根 飾演)和他一歲的女兒安在二手拍賣網站上,

購得一只二戰後納粹大屠殺倖存者帶來美國的骨董櫃。

某天,安竟意外地釋放了封印在櫃中多年的古老邪靈,招致詛咒上身…

Natasha-Calis-in-The-Possession-2012-Movie-Image

ryan0988 發表在 痞客邦 留言(0) 人氣()

px_fren8185532501

(了不起竟然能夠拍到第五集..看來第六集也快了) 

px_fren8185532515

px_fren8185532511

px_fren8185532512

(胸前有"保護傘"的標誌...艾莉絲看起來有被動過手腳)

px_fren8185532514 

(多了新角色Ada由李冰冰飾演)

picx_fren8185532501

picx_fren8185532503

ryan0988 發表在 痞客邦 留言(0) 人氣()

寫程式經常會用到編譯器預先定義的巨集 (Predefined Macros),例如:__FILE__、__LINE__、__DATE__、__TIME__、__func__ 等。這些巨集有些是標準 C/C++ 語言所定義的,有些則是編譯器自行定義的。使用 GNU C/C++ 的人,可參考以下資料:

Predefined Macros (GNU C/C++)

這份資料所提到的 System-specific Predefined Macros 是指針對不同的系統平台 (arm、mips 等),編譯器所預先定義的特殊巨集。若想直接看看這些預先定義的巨集,可執行以下指令:

echo | gcc -dM -E - | sort

使用 Microsoft 系列編譯器的人,可參考以下資料:

Predefined Macros (MSDN)

轉貼自http://softsmith.blogspot.tw/2009/07/cc-predefined-macros.html

這位版主寫了一句話與大家分享之"靠軟體謀生真不易... 勤作筆記,幫助記憶..."


ryan0988 發表在 痞客邦 留言(0) 人氣()

偶然逛到別人的網站找到的

 

该实现中创建了两个队列,一个empty队列,用于存放预分配的缓冲区,也就是一个缓存池,另外一个是full队列。实际使用中,写者从empty队列中获取一个队列项,并将数据写入该队列项指定的地址,然后将该队列项放入full队列。读者从full队列中获得一个队列项,然后对这个队列项进行处理,处理完后将这个队列项重新放入empty队列中。

#include <osa_buf.h>
#include <string.h>

int OSA_bufDelete(OSA_BufHndl *hndl)
{
    int status = OSA_SOK;

    if(hndl == NULL)
        return OSA_EFAIL;

    status = OSA_queDelete(&hndl->emptyQue);
    status |= OSA_queDelete(&hndl->fullQue);

    return status;
}

int OSA_bufCreate(OSA_BufHndl *hndl, OSA_BufCreate *bufInit)
{
    int status = OSA_SOK;
    int i;

    if(hndl == NULL || bufInit == NULL)
        return OSA_EFAIL;

    if(bufInit->numBuf > OSA_BUF_NUM_MAX)
        return OSA_EFAIL;

    memset(hndl, 0, sizeof(OSA_BufHndl));

    status = OSA_queCreate(&hndl->emptyQue, bufInit->numBuf);

    if(status != OSA_SOK) {
        OSA_ERROR("OSA_bufCreate() = %d \r\n", status);
        return status;
    }

    status = OSA_queCreate(&hndl->fullQue, bufInit->numBuf);

    if(status != OSA_SOK) {
        OSA_queDelete(&hndl->emptyQue);
        OSA_ERROR("OSA_bufCreate() = %d \r\n", status);
        return status;
    }

    hndl->numBuf = bufInit->numBuf;

    for(i = 0; i < hndl->numBuf; i++) {
        hndl->bufInfo[i].size = 0;
        hndl->bufInfo[i].flags = 0;
        hndl->bufInfo[i].timestamp = 0;
        hndl->bufInfo[i].physAddr = bufInit->bufPhysAddr[i];
        hndl->bufInfo[i].virtAddr = bufInit->bufVirtAddr[i];
        OSA_quePut(&hndl->emptyQue, i, OSA_TIMEOUT_FOREVER);
    }

    return status;
}

int OSA_bufSwitchFull(OSA_BufHndl *hndl, int *bufId)
{
    int status;
    int newBufId;

    status = OSA_bufGetEmpty(hndl, &newBufId, OSA_TIMEOUT_NONE);

    if(status == OSA_SOK) {

        if(*bufId != OSA_BUF_ID_INVALID)
            OSA_bufPutFull(hndl, *bufId);

        *bufId = newBufId;
    }

    return status;
}

int OSA_bufSwitchEmpty(OSA_BufHndl *hndl, int *bufId)
{
    int status;
    int newBufId;

    status = OSA_bufGetFull(hndl, &newBufId, OSA_TIMEOUT_NONE);

    if(status == OSA_SOK) {

        if(*bufId != OSA_BUF_ID_INVALID)
            OSA_bufPutEmpty(hndl, *bufId);

        *bufId = newBufId;
    }

    return status;
}

ryan0988 發表在 痞客邦 留言(0) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼