顯示具有 C語言 標籤的文章。 顯示所有文章
顯示具有 C語言 標籤的文章。 顯示所有文章

2012年9月20日 星期四

[C]讀取指定路徑下檔案清單

最近寫C 突然需要去擷取 路徑下的檔案目錄
就隨手在網路上 搜尋了一下

來源: http://www.cnblogs.com/beauty/archive/2010/09/09/1822535.html

主要是 使用 dirent 這個 struct
但讀出來的 檔案路徑 會包含 ".",".."等隱藏檔的路徑
簡單說會等於在linux底下" ll -a "輸出

如不需要此隱藏內容 則 記得處理


#include

struct dirent *ent = NULL;

DIR *pDir;
 
if(EQ(pDir = opendir(file_path),NULL))
{
    LOG(LOG_INFO, "error");
    return 0;
}
 
chdir(file_path); //如要讀取目錄下檔案 記得切換至當前目錄

while(NEQ(ent = readdir(pDir),NULL))
{
    strcpy(file_name,ent->d_name);

    if(EQ(*file_name,'.')) //遇到 隱藏檔 則略過
    {
      continue;
    }
  
    if(NEQ(stat(file_name,&st_file),0))
    {
      LOG(LOG_INFO, "Read header file error");
      return 0;
    }
}

2012年8月29日 星期三

[C語言]HTTP GZIP 壓縮與解壓縮

最近工作上的需求
在蒐集 有關 網頁 GZIP的壓縮的資訊

想要透過C語言 來進行解壓縮 以及壓縮

後來有找到一個 zlib 這個函式庫
官方網頁 http://zlib.net/

看了好多 文章 但是 有看到程式碼
但是 通常都沒看到詳細的解釋
只能用模仿的方式去使用 但沒有很了解原理與用法

2012年8月10日 星期五

[C語言] memove,memcpy 差異

  平常工作都在用C ,C語言最好用但是也是最難用的就是記憶體的管理,如果用得好,可以減少記憶體的使用或是增加執行效能,但我常聽到一句話 "空間換時間",最近慢慢開始感受到這句的意思了。看一下memmove 與 memcpy這兩個 founction就會大概了解哩!!

-----------

[Founction]

void *memmove(void *dest, const void *src, size_t n);

void *memcpy(void *dest, const void *src, size_t n);


兩個都是可以複製記憶體空間
但最大的差異就在於


memmove : 可以同一個配置空間上複製;memcpy : 如在同一個配置空間複製則會出現 ERROR;

有人會想說 "當然是用功能限制少的阿!!!"
NoNoNo~~
這可是需要付出代價的
因為 使用 memove的速度 會慢很多~~~~~~~
memcpy 效率就快很多 因為他直接排除掉 在同一個空間複製的問題
(網路上也有查到原始碼 memmove 發現不是在同一空間複製時 會直接帶入memcpy的founction)

[原始碼]

在這也舉一個 讓人困擾的例子


[案例]
一個配置好的記憶體空間 裡面放滿字串
如果要在中間多加一段字串進來 該如何設計比較快呢
(如果都是一般字串String處理也行拉 暫時先不以這為主 因為也是有可能遇到 不能用的時候)


1.malloc一個足夠的大小 逐次的使用memcpy放入字串

2.重新將原本大空間realloc,以及malloc可以放後半段字串的空間, 使用memcpy直接加進去新字串,再把後半段memcpy回來


3.重新將原本大空間realloc,使用memmove將後半段字串往後移動,空出要加入的 字串空間,再memcpy進來新字串



呵呵 有空可以試看看 到底哪個速度會比較快...

如果你有更快的方法 拜託!!! 一定要告訴我喔!!!!!!!