亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 7130 | 回復: 4
打印 上一主題 下一主題

[C] 請問:如何判斷操作系統(tǒng)類型以及操作系統(tǒng)位數? [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-10-23 20:39 |只看該作者 |倒序瀏覽
1. 很多開源庫(標準C語言寫的)似乎是用編譯器的內置宏來判斷的,但是GCC可以,因為它是開源的,但是比如win的cl.exe,它不是開源的,它有哪些內置宏,怎么知道?
2.ISO或者POSIX有沒有定義獲取操作系統(tǒng)類型的函數?如果有, 是什么?
3.(linux下源碼安裝軟件)configure文件會檢查操作系統(tǒng)的設置,包括CPU類型,已經安裝的軟件等等,如何做的? (給簡要描述一下)
4. (總結)用標準C語言如何判斷操作系統(tǒng)類型,包括win和linux, 以及cpu的位數?

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [報告]
發(fā)表于 2013-10-24 08:15 |只看該作者
用編譯器的內置宏來判斷的
------ 這個只能判斷你編譯時,想運行的目標平臺的版本吧,比如vc中的 WINVER 等等。而實際運行時的平臺版本只能在運行時判斷,比如winapi GetVersionEx

論壇徽章:
0
3 [報告]
發(fā)表于 2013-10-24 14:01 |只看該作者
使用OTL操作MySQL數據庫

一、編寫代碼

注:以下代碼來自OTL示例,略有改動

#include <iostream>
using namespace std;

#include <cstdio>
#include <cstring>
#include <cstdlib>

#define OTL_ODBC // Compile OTL 4.0/ODBC
// The following #define is required with MyODBC 3.51.11 and higher
#define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE
#define OTL_ODBC_UNIX // uncomment this line if UnixODBC is used
#include <otlv4.h> // include the OTL 4.0 header file
otl_connect db; // connect object

void insert()
// insert rows into table
{
    otl_stream o(1, // buffer size should be == 1 always on INSERT
            "insert into test_tab values "
                " (:f1<int>,:f2<char[31]>, "
                " (:f12<int>,:f22<char[31]>, "
                " (:f13<int>,:f23<char[31]>, "
                " (:f14<int>,:f24<char[31]>, "
                " (:f15<int>,:f25<char[31]> ",
            // INSERT statement. Multiple sets of values can be used
            // to work around the lack of the bulk interface
            db // connect object
            );

    // If the number of rows to be inserted is not known in advance,
    // another stream with the same INSERT can be opened
    otl_stream o2(1, // buffer size should be == 1 always on INSERT
            "insert into test_tab values "
                " (:f1<int>,:f2<char[31]>", db // connect object
            );

    char tmp[32];
    int i;
    for (i = 1; i <= 100; ++i) {
        sprintf(tmp, "Name%d", i);
        o << i << tmp;
    }
    for (i = 101; i <= 103; ++i) {
        sprintf(tmp, "Name%d", i);
        o2 << i << tmp;
    }
}

void update(const int af1)
// insert rows into table
{
    otl_stream o(1, // buffer size should be == 1 always on UPDATE
            "UPDATE test_tab "
                "   SET f2=:f2<char[31]> "
                " WHERE f1=:f1<int>",
            // UPDATE statement
            db // connect object
            );
    o << "Name changed" << af1;
    o << otl_null() << af1 + 1; // set f2 to NULL

}

void select(const int af1) {
    otl_stream i(50, // buffer size may be > 1
            "select * from test_tab "
                "where f1>=:f11<int> "
                "  and f1<=:f12<int>*2",
            // SELECT statement
            db // connect object
            );
    // create select stream

    int f1;
    char f2[31];

    i << af1 << af1; // :f11 = af1, :f12 = af1
    while (!i.eof()) { // while not end-of-data
        i >> f1;
        cout << "f1=" << f1 << ", f2=";
        i >> f2;
        if (i.is_null())
            cout << "NULL";
        else
            cout << f2;
        cout << endl;
    }

}

int main() {
    otl_connect:tl_initialize(); // initialize ODBC environment
    try {

        // db.rlogon("UID=xuanyuanWD=xuanyuan;DSN=examples"; // connect to ODBC
        db.rlogon("xuanyuan/xuanyuan@examples"; // connect to ODBC, alternative format of connect string

        otl_cursor::direct_exec(db, "use examples";  // 此行在原示例代碼中沒有,必須使用use xxx切換數據庫
        otl_cursor::direct_exec(db, "drop table test_tab",
            otl_exception::disabled // disable OTL exceptions
        ); // drop table

        otl_cursor::direct_exec(db,
                "create table test_tab(f1 int, f2 varchar(30)) type=innoDB"; // create table

        insert(); // insert records into the table
        update(10); // update records in the table
        select(; // select records from the table

    }

    catch (otl_exception& p) { // intercept OTL exceptions
        cerr << p.msg << endl; // print out error message
        cerr << p.stm_text << endl; // print out SQL that caused the error
        cerr << p.sqlstate << endl; // print out SQLSTATE message
        cerr << p.var_info << endl; // print out the variable that caused the error
    }

    db.logoff(); // disconnect from ODBC

    return 0;

}

二、編譯代碼

g++ -o"otl_test2" otl_test2.cpp -lmyodbc3

三、運行程序 otl_test

$ ./otl_test2

結果如下:

f1=8, f2=Name8
f1=9, f2=Name9
f1=10, f2=Name changed
f1=11, f2=NULL
f1=12, f2=Name12
f1=13, f2=Name13
f1=14, f2=Name14
f1=15, f2=Name15
f1=16, f2=Name16

四、關于OTL更多的信息

請訪問OTL的主頁:http://otl.sourceforge.net/
http://www.xuanyuan-soft.cn/
Linux下C/C++、ACE、Boost、高性能服務器端應用 開發(fā)技術

論壇徽章:
0
4 [報告]
發(fā)表于 2013-10-24 21:42 |只看該作者
bruceteen 發(fā)表于 2013-10-24 08:15
用編譯器的內置宏來判斷的
------ 這個只能判斷你編譯時,想運行的目標平臺的版本吧,比如vc中的 WINVER 等 ...


哦, 我沒說明白,sorry

因為很多開源庫都是提供源碼, 既然是源碼, 那么你在哪里編譯都行
比如創(chuàng)建一個文件, 源碼里面一般不是硬編碼的, 通常會有一個結構, 里面有函數指針,
如果是linux,那么這個指針會指向open
如果是windows, 那么這個指針會指向CreateFile

小弟不才, 分析了類似的源碼, 卻沒有發(fā)現指針賦值的語句, 好像有非常巧妙的方法來操作這個指針

我就是不懂這個方法到底是什么

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
5 [報告]
發(fā)表于 2013-10-25 08:37 |只看該作者
回復 4# faku
沒看懂,即使用指針指向open和CreateFile,但其參數數目和類型也是不一樣的呀,如何跨平臺。
另外,像上面兩個函數,應該用C標準函數 fopen 替代,這樣就可以跨平臺了呀。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯網協(xié)會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP