發表文章

目前顯示的是 三月, 2013的文章

Node umask設定

Nodejs umask設定方式,可以直接用process.umask來設定

P.S. 如果不懂umask在做什麼,可以參考鳥哥的文章
http://linux.vbird.org/linux_basic/0220filemanager.php#umask



var express = require('express'),
    socket_path = '/tmp/express_node.sock',
    fs = require('fs'),


// 設定新的umask,並且return舊的umask的設定值到oldUmask
  // 我的系統的umask原本是0002 然後改成0000
    oldUmask = process.umask(0000);

var app = express();

app.get('/', function (req, res) {
    res.send('Hello from Worker ');
});

app.listen(socket_path).on('listening',function(){
// 這邊檔案的權限會是  -rw-rw-rw-
    fs.writeFile('/tmp/test1.txt', 'Hello', function(err){
        if(err) throw err;
        console.log('it saved');
    });

process.umask(oldUmask); // 重新回復umask

    function testx(){
        var fs = require('fs');
 // 這邊檔案的權限會是  -rw-rw-r--
        fs.writeFile('/tmp/test2.txt', 'Hello', function(err){
            if(err) throw err;
            console.log('it saved');
        })…

assert

Reference : http://en.wikipedia.org/wiki/Assert.h

assert 是用來驗證你的假設

當程式去執行expression出現的結果是false的話,他就會去呼叫stderr,然後列印錯誤訊息

緊接著會去呼叫abort()來讓整個程式給停下來。反之程式就會正常執行。

直接看wiki上面的code會更容易清楚assert的用途。



#include <stdio.h>#include <assert.h>int test_assert (int x ){assert( x <=4);return x;}int main (void){int i;for(i=0; i<=9; i++){ test_assert( i );printf("i = %i\n", i);}return0;}i = 0 i = 1 i = 2 i = 3 i = 4 assert: assert.c:6: test_assert: Assertion `x <= 4' failed. Aborted

GCC版本判斷方法

Referenceshttp://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html


如果要用C, C++, Objective-C和Fortran來判斷GCC的版本的話,可以使用以下的Marco




__GNUC____GNUC_MINOR____GNUC_PATCHLEVEL__
P.S.  __GNUC_PATCHLEVEL__是GCC 3.0才有
還有要判斷編譯器是不是GCC,有很簡單的版法就是直接判斷__GCC__就可以了例如 #ifdef __GNUC__
Example 1:
int main(int argc, const char *argv[]){
     printf("__GNUC__  :                           %d\n" , __GNUC__);     printf("__GNUC_MINOR__ :             %d\n" , __GNUC_MINOR__);     printf("__GNUC_PATCHLEVEL__: %d\n" , __GNUC_PATCHLEVEL__);     return 0;}
輸出結果 :
__GNUC__  : 4__GNUC_MINOR__ : 7__GNUC_PATCHLEVEL__: 2

這是我的gcc的版本 4.7.2


Example 2:
判斷GCC的版本
/* Test for GCC > 3.2.0 */ #if __GNUC__ > 3 || \ (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \ (__GNUC_MINOR__ == 2 && \ __GNUC_PATCHLEVEL__ > 0))或是#define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) /* Test for GCC &…