目前分類:Linux C/C++ (63)

瀏覽方式: 標題列表 簡短摘要

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

讀取超長字串時,fget 會如何處置呢?現在有一個文字檔,只有一行 1234567812345678....。使用下列程式碼執行,暫存陣列數量為 9,一次只會讀取 8 個字元,最後再補一個 0 做結束字元。

int main(int argc, char *argv[])
{
    FILE*fp;
    char buf[9];
    fp = fopen(argv[1], "r");
    if (fp) {
        while (fgets(buf, sizeof(buf), fp) != NULL) {
            printf("%s\n", buf);
        }
        fclose(fp);
    }
    return 0;
}
$$ ./a.out aaa
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678
12345678

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

link

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • int mkdir(const char *pathname, mode_t mode)
  • int open(const char *pathname, int flags, mode_t mode)
  • mode_t umask(mode_t mask)

mkdir, open 最後一個參數都是用來設定權限,我一般都設定為 0777,也就是權限全開。但是每次執行完,所得到的權限卻是 0755,百思不得其解。

原來 linux 還有一個東東叫做 process's file mode creation mask,每次執行 open, mkdir 時,權限設定值跟 process's file mode creation mask 做 AND 之後才是真的權限。

umask 預設值為 022,0777 & ~022 = 0755,所以每次所得到的權限都是 0755。


台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

typedef struct {
        char *name;
        char type;
        long size;
} NODE;
class CloudUploadMenu : public DGContainerMenu
{
public:
.... 略 .....

private:
.... 略 .....
        vector dir_node;

private:
.... 略 .....
        static int CompareData(const void *, const void *);
};
int CloudUploadMenu::GetDirFile(char *path)
{
.... 略 .....
        qsort(&dir_node[0], dir_node.size(), sizeof(NODE*), CompareData);
        return 0;
}

int CloudUploadMenu::CompareData(const void *a, const void *b)
{
        if ((*((NODE**)a))->type == (*((NODE**)b))->type)
                return(strcmp((*((NODE**)a))->name, (*((NODE**)b))->name));
        else
                return((*((NODE**)a))->type - (*((NODE**)b))->type);
}
void qsort (void* base, size_t num, size_t size,
            int (*compar)(const void*,const void*));

重點

  • vector 不要用指標變數,不知為啥就是有問題。
  • compare function 需要宣告成 static,因為它是函數指標。
  • base 指向 vector 的第一個元素。
  • num 指向 vector 的 size。
  • size 則取 vector 型別T的大小。
  • 記得不要用 vector.at() 來取得第一筆資料,因為當 size=0 會造成當機。
  • 看別人的文章說 std::sort 的速度比 qsort 快,而且也比較符合 vector 的用法,但是剛好我的 embeded linux 沒支援,所以就沒實做了。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • 做 cross compilng 需下 --host=mips-linux,同時要 export PATH,讓 configure 可以找到 mipx-linux-gcc。沒有做 export PATH,configure 找不到 cross compiler,還是當成 gcc 來編譯。
  • configure 主要是透過 automake 來產生的。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()




台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

收集一些有關 Linux C/C++ 的單元測試框架。
  1. Cgreen,LGPL,下載
    這個框架很像 JUnit,有 setup() ,teardown() and add_test() 等函數,目前仍有更新中。
  2. C Unit Test System (CUT)

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

http://www.handhelds.org/minihowto/porting-software.html

Porting Software to ARM Linux

Most of the software you are likely to run on the iPAQ was written in C. C is not an inherently portable language. To write portable code in C generally requires some extra thought.

This HOWTO describes the common portability issues that we run into when porting applications to ARM Linux, especially from x86 Linux.

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

今天梅觀突然跟我說跑馬燈不跑了,我感到一陣錯愕;原本好好的功能,怎麼突然變成不能用了。原來是梅觀要求跑馬燈檔名可以自訂,好死不死的剛好用了大寫的檔案名稱。mount 到 uclinux 後,卻發現都變成小寫,真是奇怪。上 google 一查,原來是 mount 的 default 所引起的,改一下參數即可。

mount -t vfat -o shortname=winnt /dev/scsi/host1/bus0/target0/lun0/part1 
/mnt/hda
man mount 的說明
      shortname=[lower|win95|winnt|mixed]
 
              Defines  the  behaviour  for  creation  and display of filenames
              which fit into 8.3 characters. If a long name for a file exists,
              it will always be preferred display. There are four modes:
 
              lower  Force  the short name to lower case upon display; store a
                     long name when the short name is not all upper case.
                                                                                                                                             
              win95  Force the short name to upper case upon display; store  a
                     long name when the short name is not all upper case.
                                                                                                                                             
              winnt  Display  the  shortname as is; store a long name when the
                     short name is not all lower case or all upper case.
                                                                                                                                             
              mixed  Display the short name as is; store a long name when  the
                     short name is not all upper case.
                                                                                                                                             
       The default is "lower".

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

GNU/Linux 上的 ext2/ext3/ext4 档案系统在运作时发生问题 (例如 CPU/内存错误或磁盘错误),系统缺省会继续正常运作。然而,如果问题严重,继续运作可能会令损害加剧,档案系统资料亦会因此而流失。

事实上,系统管理员可以在档案系统的 super block 或挂载档案系统时,指定发生问题时的错误处理方案。Ext2/ext3/ext4 档案系统可以使用三个错误处理方案 (error behavior):

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

dosfsck
0 - 檢查沒有錯誤。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

diff -ruN e2fsprogs-1.40.2-old/e2fsck/Makefile.in e2fsprogs-1.40.2-new/e2fsck/Makefile.in
--- e2fsprogs-1.40.2-old/e2fsck/Makefile.in     2007-07-12 23:35:46.000000000 +0800

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

來源: http://www.pigfoot.org/cc/devel/auto1/


Abstract

在 Unix 底下,automakeautoconf 常被用來管理 C/C++ 的專案。 如果您的專案是根據 GNU 的標準建構出來的,那麼它們能夠幫您節省很多 make 以及 configure 的時間。然而,萬事起頭難。希望這篇指南能夠為剛入門的程式設計師提供一些有用的資訊。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

1.  __BASE_FILE__ 
完整的原始檔案路徑

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

1. 標準 C89 要求集合或陣列元素的初始值必須依照宣告時的元素順序指定。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

每個語句內嵌表達式都是一個可以聲明局部跳轉標籤的域。 一个局部标签只是一个标识符:你可以使用通常的goto语句跳到它--但是只能在它所属的域内这么做。 一個局部標籤只是一個標識符:你可以使用通常的goto語句跳到它--但是只能在它所屬的域內這麼做。
一个局部标签的申明如下: 一個局部標籤的申明如下:

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

1. LANG 設定 GCC 如何處理原始碼字串。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

        我们知道地球自转一圈为1天,地球围绕太阳公转一圈为1年。那1年到底等于多少天哪?答案是:1年=365天5小时48分46秒,即 365.242199[074] 天(注:用[xxx]表示无限循环)

因此,4年 = 4*365.242199[074] = 4*365 + 0.9687[962] 天

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

出處: http://checko.blogspot.com/2006/02/create-romfs-genromfs-and-genrommkdev.html

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

1 234