Recent Posts

免費! Flickr照片整本下載(Flickr Downloader) / 整個資料夾上傳(FlickrSync)

免費! Flickr照片整本下載(Flickr Downloader) / 整個資料夾上傳(FlickrSync)

現在照片都用Flickr備份,努力養成每次拍完回家就備份的好習慣。 感謝網路的上傳速度終於 

熟悉的味道 CakePHP

熟悉的味道 CakePHP

最近真的是忙翻了,要做點什麼之前似乎都要先來個毀滅性的衝擊? 誤打誤撞接了睽違四年的PHP 

[linux] fork() 基本概念 和他的變數相關。

[linux] fork() 基本概念 和他的變數相關。

常常看到fork一詞,在OS裡面算是相當重要的基本概念。
一直沒時間去深究一下,就剛好藉此契機研究一下:D

資料參考於http://blog.csdn.net/jason314/article/details/5640969
真的非常精闢! 所以下面我研究的範例也未修改其標頭,一切轉載於此網頁!

/*
 *  fork_test.c
 *  version 2
 *  Created on: 2010-5-29
 *      Author: wangth
 */
#include <unistd.h>
#include <stdio.h>
int main(void)
{
   int i=0;
   printf("i son/pa ppid  pid  fpid\n");
   for(i=0;i<2;i++)
   {
		pid_t fpid=fork();
		if(fpid==0)
			printf("%d child  %4d %4d %4d\n",i,getppid(),getpid(),fpid);
		else
			printf("%d parent %4d %4d %4d\n",i,getppid(),getpid(),fpid);
   }
   return 0;
}

他文章裡面的講解很清楚,只是有一點讓我不解的是 fork產生出來的child process變數會是怎樣的行為?
因為fork出來的child不會和parent共用變數,所以我一直以為他會回到main的源頭去取初始值。

所以在這個例子裡面我覺得會印出無窮迴圈,
因為for loop中的i每次在新的child被生成出來以後都會是零,然後就沒完沒了。

但是結果看起來跟我孱弱的推測不合,她是會停止的。

結果看起來就是他的child procee的 i
將會根據他被生出來的那時候的i來做初始值依據。

因此,在最後被生出來的child process i 將會等於1
等於一的話他在丟進去for判斷就發現不用再往下做了,所以就停止。

在這邊特別註記這個fork出來的child變數初始值雖然不會和他的parent process共用,
但是他的初始值應該就是在他被生出來的那一瞬間的那個值的內容。

猜測應該是這樣XD

[C] strtok 使用心得

[C] strtok 使用心得

這傢伙實在有點酷,用一般的常理去推測是不行的XD 當然有可能是我太憨,但是這個好用的東西是 

[C] fget 的換行小眉角

[C] fget 的換行小眉角

fget 其實很方便,但是如果真的用他來讀取一個檔案,
要小心他會在結尾處自己加上一個換行字元 -> “\n”

這個東西會有可能造成strcmp或是其他的一些判斷上有風險。

abc\n 即使我們真正印出來他會只顯示 “abc”。不過他骨子裡的char array長度偷偷的是4,包含了最後的\n。
所以我們如果把自己宣告的abc直接和這個值相比,
最後strcmp傳回來的就不會是相等。

if( (fp_tmp = fopen("/var/cur_fw_version","r"))!=NULL){
   fgets(current_version,sizeof(current_version),fp_tmp);
   //===判斷從fget拿出來的字串是不是含有最後的換行字元,如果有就把它換成結尾字元\0
   if (current_version[strlen(current_version) - 1] == '\n')
   current_version[strlen(current_version) - 1] = '\0';
   //
   fclose (fp_tmp); //開完檔記得要關!!!
}
[C] const 和 pointer 使用的大亂鬥

[C] const 和 pointer 使用的大亂鬥

最近在看C的書,發現幾個問題很有趣,網路上文章眾說紛紜, 最後還是自己寫一個程式來測試最準 

Gmail 和 iphone(ipad) 聯絡人 雙向同步

Gmail 和 iphone(ipad) 聯絡人 雙向同步

之前有一種舊的方式可以同步Gmail聯絡人跟iphone 但是好像只是單向的,也就是說只能 

[Linux : Ubuntu] 修改network interface的識別名稱(eth0, eth1,….. etc)

[Linux : Ubuntu] 修改network interface的識別名稱(eth0, eth1,….. etc)

有時候Linux很聰明又很不聰明。

他似乎很努力想要讓你輕鬆的使用,所以自動幫你把driver裝上去,
但是卻也因此你當這些自動的功能出錯或是要調整就不知道該怎辦了。

我遇到的狀況是常常需要抽換USB網卡,但是ubuntu每次都會把這張卡認成新的卡。
也就是Driver會覺得是新的 然後他的識別名稱就會跟上次給的不同。
假使上次是給eth1 這次就會往下給變成eth2…
這樣會造成很多程式如果是把interface name寫成死的就會出錯。

改法如下
編輯 /etc/udev/rules.d/70-persistent-net.rules
再編輯 /etc/network/interfaces

網站上提供以下的重新啟動方式
# udevadm trigger
# /etc/init.d/networking restart
但是…

我還是覺得重開比較快…

[JavaScript] 使用Regular Expression 過濾 空白/特殊字元 的字串

[JavaScript] 使用Regular Expression 過濾 空白/特殊字元 的字串

常常在網頁上要對字串做一些過濾處理, 比較困難的可能會牽扯到一些特殊字元!@#$%^^&a