<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

    #

    依我看GTK與QT之爭既不是GNOME和KDE之爭,也不是GPL和QPL之爭,
    而是美國人和歐洲人之爭,看看KDE的開發過程就知道了,KDE幾乎
    全是歐洲的開發者,而GNOME主要是美國的開發者,美國人一向對 
    歐洲人很不服氣,因此支持KDE的只有SuSE,而redhat和slackware
    還有debian對KDE很不感冒.而美國的Linux老大redhat對GNOME情
    有獨鐘,出人出錢:)
     
    KDE的好處在應用軟件多,QT是C++的,代碼可重用性好,但是由于
    開發時間早,好多東西,后來才加,功能不好,如Drag&Drop Protocol, 
    還有COBRA的支持是用的mico.另外其致命傷就是QT的license,到現 
    在還是QPL,不是GPL,這也是被猛烈攻擊的一個地方.
     
    GNOME的優點是設計思想先進,速度比較快,畢竟GTK是C寫的,并且  
    GNOME得到GNU的全力支持,這可是一個非同小可的問題,感覺KDE
    現在變成了后娘養的孩子:)GNOME的缺點是現在沒有主力Window
    Manager,而enlighment不是一個實用的WM,它將來占的資源只怕
    比KDE還多.
     
    現在我覺得KDE的生死之戰就在于那一批Koffice的進度,一旦Koffice
    普及,GNOME就不可能完全擊敗KDE,甚至KDE利用Koffice來擊敗GNOME
    都很有可能.而GNOME現在也要急劇擴張Application,不過我覺得
    美國的程序員比歐洲的程序員要勤奮得多:)現在GTK.ORG上的APP
    的增長率要比KDE的快.我個人還是喜歡GTK,原因一是GTK不象Win95
    二是 GTK是用C的:)
     
    總而言之, 美國人很有可能擊敗歐洲人,從而會贏得這場GNOME VS KDE
    的戰爭.   
    posted @ 2005-09-28 10:51 ivaneeo 閱讀(11354) | 評論 (14)編輯 收藏

    Ubuntu Scientists

    Science on Linux

    The aim of this page is to become a useful resource for scientist and science students using Ubuntu (or any other) Linux. Please add information or comments.

    Introduction

    Linux is a great operating system for scientists, for many reasons:

    • It is stable, secure and runs on all sorts of hardware, from embedded systems to supercomputers.

    • It is possible to create a highly customised setup to do what you want.

    • Repetitive tasks can be automated.

    • There are lots of useful free scientific programs and tools.

    Although some people say that linux is not user friendly enough for the desktop yet, scientists are usually a bit more familier with computers, and don't mind learning how to do things.

    Applications

    Some applications that scientists use in Linux. Please add some more.

    See also: SAL (Scientific Applications on Linux) is a collection of information and links to software that will be of interest to scientists and engineers. The broad coverage of Linux applications will also benefit the whole Linux/Unix community. There are currently 3,017 entries in SAL. [WWW] http://sal.iatp.by/

    Physics

    • Cernlib - A suite of data analysis tools and libraries created for use in physics experiments, but also with applications to other fields such as the chemical and biological sciences. [WWW] Cernlib

    • JaxoDraw - A Java program for drawing Feynman diagrams [WWW] JaxoDraw

    • ROOT - An Object Oriented Data Analysis Framework [WWW] ROOT

    • Geant4 - A toolkit for the simulation of the passage of particles through matter [WWW] Geant4

    • CLHEP - A Class Library for High Energy Physics [WWW] CLHEP

    • Pluto++ - A Monte Carlo simulation tool for hadronic physics [WWW] Pluto++

    • Data files from the Particle Data Group [WWW] http://pdg.lbl.gov/2005/html/computer_read.html

    Chemistry

    • GChemPaint - A 2D chemical structures editor [WWW] GChemPaint

    • ghemical - A molecular modeling and computational chemistry package that provides molecular mechanics, semi-empirical (via MOPAC7), and ab initio (via MPQC) calculations [WWW] ghemical

    • gdis - A molecular display program that supports OpenGL and POVRay rendering. [WWW] gdis

    • OpenBabel - A chemical file format conversion program. [WWW] OpenBabel

    • Chemtool and Xdrawchem - 2D molecule drawing programs similar to ChemDraw. [WWW] Chemtool and [WWW] xdrawchem

    • mpqc - The Massively Parallel Quantum Chemistry Program. Ab initio quantum chemical computational package. [WWW] mpqc

    • [WWW] Linux4Chemistry - list of linux applications which may be useful for chemists

    Biology

    Mathematics

    • Octave - GNU Octave is a high-level language, primarily intended for numerical computations. (Similar to MATLAB). [WWW] Octave

    • SciCraft - Addon to Octave, clones Simulink. Still in developement, blocks have to be written by the user. It is supposed to specialize in bioinformatics functions [WWW] SciCraft

    • Scilab - Another MATLAB-like software. [WWW] Scilab

    • SciCos - A free Simulink-like addon to Scilab [WWW] SciCos

    • Maxima - A computer algebra system (xmaxima is its X interface)

    • GNU MP - GNU Multiprecision arthmetic library. Useful if you need to use very big numbers in a C program. [WWW] GMP

    • GSL - the Gnu Scientific Library [WWW] GSL

    • R - for statistical computing and graphics. [WWW] R

    • OOStatistics - A statistics macro for openoffice calc. [WWW] OOStatistics

    • freefem - A PDE oriented language using Finite Element Method - 2D and 3D versions. [WWW] freefem

    • SciPy - An open source library of scientific tools for Python. [WWW] SciPy

    • F2PY - Fortran to Python interface generator provides a connection between Python and Fortran languages. [WWW] F2PY

    Astronomy

    Electronics

    • Eagle - A printed circuit board design tool. [WWW] Eagle

    • oregano - Schematic capture, netlists, and spice for simulations. [WWW] oregano

    • gEDA - GPL'd suite of Electronic Design Automation tools. [WWW] gEDA

    • Qucs - An integrated circuit simulator [WWW] Qucs

    Computer Science

    Geography

    • UbuntuGIS Geographical Information System

    • ncview - A very fast program for viewing netCDF files (a standard widely used in meteorology, climate and oceanography) [WWW] ncview

    • Generic Mapping Tools (GMT) - a mapping program that can also be used to make pretty graphs. [WWW] GMT

    Distributed Computing

    • openmosix - Turns a network of ordinary computers into a supercomputer. [WWW] openmosix

    • boinc - A software platform for distributed computing using volunteered computer resources [WWW] boinc

      • projects include Climateprediction.net,Einstein@home,LHC@home,Predictor@home,SETI@home

    Tools

    • Xfig - A diagram and figure creation tool. Can import GIF, JPEG, and EPS figures and can export to Postscipt, LaTeX, and bitmap files. [WWW] Xfig

    • Dia - A "Visio" like diagram tool. Especially useful for simple circuits and flowcharts. [WWW] Dia

    • BIKA - A laboratory information management system (LIMS) built on top of Zope and Plone, and coded in Python [WWW] BIKA

    Plotting Tools
    • GNUPlot - A command-line driven 2D/3D plotting tool. Can perform data fitting and exports to PNG, PS, Xfig, and Latex formats. Has python bindings (python-gnuplot) for including in other programs or scripts. [WWW] gnuplot

    • grace - A 2D WYSIWYG plotting tool that exports to JPEG, PNG, EPS, PDF, and SVG. Also does curve fitting. [WWW] grace

    • PGPLOT - Fortran- or C-callable graphics subrutine package for making scientific graphs. [WWW] PGPLOT

    • SciGraphica - A scientific application for data analysis and technical graphics. Attempts to be a [WWW] "Microcal Origin" clone [WWW] SciGraphica

    • Qtiplot - A 2D/3D, Qt based plotting tool that attempts to be another "Origin" clone [WWW] Qtiplot

    • LabPlot - Another Qt based 2D/3D GUI plotting tool that also does curve fitting, supports many data formats, LaTeX labeling, GSL functions, and statistics. [WWW] LabPlot

    • Veusz - A scientific plotting package written in Python. [WWW] veusz.

    • Gri - A scientific graphics language. [WWW] Gri

    Word Processing Tools
    • LaTeX - WYGIWYW (What You Get Is What You Want) text mark up system. What real scientist write papers with. [WWW] LaTeX

    • Lyx - A WYSIWYG LaTeX frontend. [WWW] Lyx

    • Kile - A LaTeX-frontend for KDE, with support for syntax highlighting and convenient palettes for all standard mathematical symbols and text formatting. It also provides easy access to forward and inverse search facilities. [WWW] Kile

    • eqe - Allows you write equations in Latex and drag and drop them into other apps [WWW] eqe

    • Conglomerate - An XML editor, to create DocBook or similar formats. [WWW] Conglomerate

    • Jabref - A graphical bibtex bibliography manager which can be used in conjunction with lyx. It is java based. [WWW] Jabref

    • Texmaker - Like Kile but loads faster ;-) [WWW] Texmaker

    • TeXmacs - A wysiwyg scientific text editor [WWW] TeXmacs

      • doubles as an interface for computer algebra systems like [Maxima], maple, mupad, axiom, giac, GTybalt, Macaulay 2, pari, yacas

      • can also be used as a front end for [R], Octave, [GNUplot], [Xfig], [Dr. Geo], [Eukleides],[Qcl]

    • preview-latex - (almost) turns emacs into a WYSIWYG-LaTeX-frontend [WWW] preview-latex

    • [WWW] latex2html , [WWW] tth and [WWW] hevea for converting LaTeX to html.

    • gaim-latex - A small gaim (see GaimHowto) plugin which allow you to insert LaTeX formulae into im conversations. [WWW] gaim-latex

    Ubuntu Packages

    Science Section
    Mathematics Section
    TeX Section

    Alternatives to Proprietry Scientific Software

    hopefully this list will get long enough to deserve its own page.

    Proprietary

    Free alternative

    Info

    Link

    Matlab

    Octave

    Matrix based computing environment

    [WWW] Octave

    Matlab

    Scilab

    see above

    [WWW] Scilab

    Simulink

    SciCraft

    Based on Octave (Available for Debian, I think)

    [WWW] SciCraft

    Simulink

    SciCos

    Based on Scilab (Not found in Ubuntu Repos)

    [WWW] SciCos

    Origin

    SciGraphica & Qtiplot

    Data plotting and analysis

    [WWW] SciGraphica & [WWW] Qtiplot

    Hardware

    Data acquisition

    Computer controlled systems

    • RTAI - Real-Time Application Interface is a hard real-time extension to the Linux kernel [WWW] http://www.rtai.org/

    Other information

    Other Linux Distributions for Scientists

    • [WWW] Quantian A Knoppix / Debian variant tailored to numerical and quantitative analysis.

    • [WWW] Debian-Med Debian-Med is a "Custom Debian Distribution" for medical practice and research.

      • debian-med metapackages are in Ubuntu(Universe): to list them type:  apt-cache search debian-med 

    • [WWW] Scientific Linux Linux release put together by Fermilab and CERN based on RH

    • [WWW] Madrake4Chemistry is about using Madrake Linux for chemistry

    Unofficial Ubuntu/Debian repositories with science software

    Mailing Lists about Linux and Science

    Related Wiki Pages

    UbuntuSciencePackages is a list of packages that are in the official Ubuntu Repositories that scientist use

    UbuntuScienceMetaPackages discusses possible science metapackages

    Forum Threads

    Links

    Books

    (2005-09-26 06:17:30由KevinGoldstein編輯)

    posted @ 2005-09-26 15:34 ivaneeo 閱讀(2380) | 評論 (1)編輯 收藏

    Ubuntu uses sudo to allow a normal user administrative privileges. Thus the traditional UNIX 'root' account is disabled (i.e. it is not possible to log in as root). All the graphical configuration utilities use sudo by default. Thus when Synaptic or something similar asks you for a password, it is asking for your password.

    The first user created is part of the admin group, which can use sudo. Any users created after that are not by default. It is recommended that all users of Ubuntu use sudo, as it provides clear benefits to security.

    Notes

    • The password is stored by default for 15 minutes. After that time, you will need to enter your password again

    • To run the graphical configuration utilities with sudo, simply launch the application via the menu.

    • To run a program using sudo that normally is run as the user, such as gedit, go to Applications --> Run Application and enter 'gksudo gedit'. For users of Kubuntu, used 'kdesu' in replacement for gksudo. Breezy users, go to Applications --> System Tools --> Run as different user.

    • To use sudo on the command line, preface the command with sudo, as below.

    sudo chown bob *

    To start a root shell (i.e. a command window where you can run root commands) use:

    sudo -s

    Warning: sudo -s doesn't change the environment variables ($HOME, $PATH etc). It can have some bad side effects. You can use sudo -i to initialize a full root environment.

    Adding users

    Warty

    In Warty, adding a new user involves editing the /etc/sudoers file. To edit that file, you must use 'visudo' as it will error check the file before exiting. To add a user with the same administration rights as the first user, add the following lines to the file: '$newuser ALL=(ALL) ALL'. Replace the $newuser with the username.

    Hoary

    To add a new user to sudo, open the "Users and Groups" tool from System --> Adminitration menu. Then click on the user and then on properties. Choose the "User Privileges" tab. In the tab, find "Executing system administration tasks" and check that.

    Benefits of sudo

    The benefits of leaving root disabled by default include the following.

    • Initially the Ubuntu team wanted the easiest install possible. By not enabling root, a couple of steps requiring user interaction during install could be avoided. (Colin Watson)

    • Even more significantly, if root were enabled during install, the user would be required to forever remember the password they chose--even though they would rarely use it. Root passwords are often forgotten by users who are new to the Unix security model. (Matt Zimmerman)

    • It avoids the "I can do anything" interactive login by default--you will be prompted for a password before major changes can happen, which should make you think about the consequences of what you are doing. If you were logged in as root, you could just delete some of those "useless folders" and not realize you were in the wrong directory until it's too late. It's been good Unix practice for a long time to "su-command-^D" regularly instead of staying in a root shell--unless you're doing serious system maintenance (at which point you can still "sudo su"). (Jim Cheetham and Andrew Sobala)

    • Sudo adds a log entry of the command(s) run (In /var/log/auth.log). If you mess up, you can always go back and see what commands were run. (Andrew Zbikowski)

    • Every cracker trying to brute-force their way into your box will know it has an account named "root" and will try that first. What they don't know is what the usernames of your other users are.

    • Allows easy transfer for admin rights, in a short term or long term period, by added and removing users from groups, while not compromising the root account. (Stuart Bishop)

    Security

    While there are various advantages and disadvantages to this approach, compared with the traditional superuser model. Neither is clearly superior overall.

    • By encouraging the execution of single commands with root privileges, rather than opening a shell, sudo:

      • Reduces the amount of time spent with root privileges, and thus the risk of inadvertently executing a command as root

      • Provides a more useful audit trail

    • Having a separate root password (the traditional model) provides an extra layer of protection if an administrative user's password is compromised

    • In either case, if the administrative user (who uses sudo or su to become root) is compromised, the attacker can generally gain root through an indirect attack

    Possible issues with the "sudo" model

    Although for desktops the benefits of using sudo are great, there are possible issues which need to be noted:

    • Some packages from universe are effectively broken (e.g. webmin) or become dangerous to use. A good workaround is to enable the root account before dealing with the affected packages (sudo su-; passwd <password>) and to lock it again afterwards (su -; passwd -l).

    • Redirecting the output of commands run with sudo can catch new users out (consider "sudo ls > /root/somefile"). Workarounds for this include using "sudo sh -c 'ls > /root/somefile'" (but escaping for this gets very ugly very quickly), using [WWW] Adverbio, or simply using sudo -s to get a root shell and going from there

      • MattZimmerman: A simple approach which works for most cases is to use dd(1): ls | sudo dd of=/root/somefile

    • In a lot of office environments the ONLY local user on a system is root. All other users are imported using NSS techniques such as nss-ldap. To setup a workstation, or fix it, in the case of a network failure where nss-ldap is broken, root is required. This tends to leave the system unusable unless cracked.

      • JerryHaltom: Perhaps in these cases it neccessitates the creation of a local account: "admin" with sudo to root privileges.

    Misconceptions

    • Isn't sudo less secure than su?

      • The basic security model is the same, and therefore these two systems share their primary weaknesses. Any user who uses su or sudo must be considered to be a privileged user. If that user's account is compromised by an attacker, the attacker can also gain root privileges the next time the user does so. The user account is the weak link in this chain, and so must be protected with the same care as root.

        On a more esoteric level, sudo provides some features which encourage different work habits, which can positively impact the security of the system. sudo is commonly used to execute only a single command, while su is generally used to open a shell and execute multiple commands. The sudo approach reduces the likelihood of a root shell being left open indefinitely, and encourages the user to minimize their use of root privileges.

    • I won't be able to enter single-user mode!

      • The sulogin program in Ubuntu is patched to handle the default case of a locked root password.

    Enabling the root account

    Note: This is not recommended!

    To enable the root account (i.e. set a password) use:

    sudo passwd root

    Enter your existing password
    Enter password for root
    Confirm password for root

    Disabling the root account

    Note: This is if you have already enabled a root account and wish to disable it again. To disable the root account after you have enabled it use:

    sudo passwd -l root

    This locks the root account.

    Running GUI applications with Root permissions

    It is generally recommended that you do not run applications with root privileges, but if you have to, it is recommended that you do not run "sudo {GUIAPP}", as sudo may not set up the environment correctly, and particularly on KDE this can be detrimental. Instead, always use gksudo {GUIAPP} or kdesu {GUIAPP}.

    posted @ 2005-09-26 14:48 ivaneeo 閱讀(754) | 評論 (0)編輯 收藏

    1. 棧(stack)與堆(heap)都是Java用來在Ram中存放數據的地方。與C++不同,Java
    動管理棧和堆,程序員不能直接地設置棧或堆。

      2. 棧的優勢是,存取速度比堆要快,僅次于直接位于CPU中的寄存器。但缺點是
    ,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。另外,棧數據可以共享
    ,詳見第3點。堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器
    Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由于要在運行時動
    態分配內存,存取速度較慢。

      3. Java中的數據類型有兩種。

      一種是基本類型(primitive types), 共有8種,即int, short, long, byte, float
    , double, boolean, char(注意,并沒有string的基本類型)。這種類型的定義是通
    過諸如int a = 3; long b = 255L;的形式來定義的,稱為自動變量。值得注意的是
    ,自動變量存的是字面值,不是類的實例,即不是類的引用,這里并沒有類的存在。
    如int a = 3; 這里的a是一個指向int類型的引用,指向3這個字面值。這些字面值的
    數據,由于大小可知,生存期可知(這些字面值固定定義在某個程序塊里面,程序塊
    退出后,字段值就消失了),出于追求速度的原因,就存在于棧中。

      另外,棧有一個很重要的特殊性,就是存在棧中的數據可以共享。假設我們同時
    定義:

    int a = 3;
    int b = 3;

      編譯器先處理int a = 3;首先它會在棧中創建一個變量為a的引用,然后查找有
    沒有字面值為3的地址,沒找到,就開辟一個存放3這個字面值的地址,然后將a指向
    3的地址。接著處理int b = 3;在創建完b的引用變量后,由于在棧中已經有3這個字
    面值,便將b直接指向3的地址。這樣,就出現了a與b同時均指向3的情況。

      特別注意的是,這種字面值的引用與類對象的引用不同。假定兩個類對象的引用
    同時指向一個對象,如果一個對象引用變量修改了這個對象的內部狀態,那么另一個
    對象引用變量也即刻反映出這個變化。相反,通過字面值的引用來修改其值,不會導
    致另一個指向此字面值的引用的值也跟著改變的情況。如上例,我們定義完a與b的值
    后,再令a=4;那么,b不會等于4,還是等于3。在編譯器內部,遇到a=4;時,它就
    會重新搜索棧中是否有4的字面值,如果沒有,重新開辟地址存放4的值;如果已經有
    了,則直接將a指向這個地址。因此a值的改變不會影響到b的值。

      另一種是包裝類數據,如Integer, String, Double等將相應的基本數據類型包
    裝起來的類。這些類數據全部存在于堆中,Java用new()語句來顯示地告訴編譯器,
    在運行時才根據需要動態創建,因此比較靈活,但缺點是要占用更多的時間。 4. String
    是一個特殊的包裝類數據。即可以用String str = new String("abc");的形式來創
    建,也可以用String str = "abc";的形式來創建(作為對比,在JDK 5.0之前,你從
    未見過Integer i = 3;的表達式,因為類與字面值是不能通用的,除了String。而在
    JDK 5.0中,這種表達式是可以的!因為編譯器在后臺進行Integer i = new Integer
    (3)的轉換)。前者是規范的類的創建過程,即在Java中,一切都是對象,而對象是類
    的實例,全部通過new()的形式來創建。Java中的有些類,如DateFormat類,可以通
    過該類的getInstance()方法來返回一個新創建的類,似乎違反了此原則。其實不然
    。該類運用了單例模式來返回類的實例,只不過這個實例是在該類內部通過new()來
    創建的,而getInstance()向外部隱藏了此細節。那為什么在String str = "abc";
    中,并沒有通過new()來創建實例,是不是違反了上述原則?其實沒有。

      5. 關于String str = "abc"的內部工作。Java內部將此語句轉化為以下幾個步
    驟:

      (1)先定義一個名為str的對String類的對象引用變量:String str;

      (2)在棧中查找有沒有存放值為"abc"的地址,如果沒有,則開辟一個存放字面值
    為"abc"的地址,接著創建一個新的String類的對象o,并將o的字符串值指向這個地
    址,而且在棧中這個地址旁邊記下這個引用的對象o。如果已經有了值為"abc"的地址
    ,則查找對象o,并返回o的地址。

      (3)將str指向對象o的地址。

      值得注意的是,一般String類中字符串值都是直接存值的。但像String str =
    "abc";這種場合下,其字符串值卻是保存了一個指向存在棧中數據的引用!

      為了更好地說明這個問題,我們可以通過以下的幾個代碼進行驗證。

    String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1==str2); //true

      注意,我們這里并不用str1.equals(str2);的方式,因為這將比較兩個字符串
    的值是否相等。==號,根據JDK的說明,只有在兩個引用都指向了同一個對象時才返
    回真值。而我們在這里要看的是,str1與str2是否都指向了同一個對象。
    結果說明,JVM創建了兩個引用str1和str2,但只創建了一個對象,而且兩個引用都
    指向了這個對象。

      我們再來更進一步,將以上代碼改成:

    String str1 = "abc";
    String str2 = "abc";
    str1 = "bcd";
    System.out.println(str1 + "," + str2); //bcd, abc
    System.out.println(str1==str2); //false

      這就是說,賦值的變化導致了類對象引用的變化,str1指向了另外一個新對象!
    而str2仍舊指向原來的對象。上例中,當我們將str1的值改為"bcd"時,JVM發現在棧
    中沒有存放該值的地址,便開辟了這個地址,并創建了一個新的對象,其字符串的值
    指向這個地址。

      事實上,String類被設計成為不可改變(immutable)的類。如果你要改變其值,
    可以,但JVM在運行時根據新值悄悄創建了一個新對象,然后將這個對象的地址返回
    給原來類的引用。這個創建過程雖說是完全自動進行的,但它畢竟占用了更多的時間
    。在對時間要求比較敏感的環境中,會帶有一定的不良影響。

      再修改原來代碼:

    String str1 = "abc";
    String str2 = "abc";

    str1 = "bcd";

    String str3 = str1;
    System.out.println(str3); //bcd

    String str4 = "bcd";
    System.out.println(str1 == str4); //true

      str3這個對象的引用直接指向str1所指向的對象(注意,str3并沒有創建新對象
    )。當str1改完其值后,再創建一個String的引用str4,并指向因str1修改值而創建
    的新的對象。可以發現,這回str4也沒有創建新的對象,從而再次實現棧中數據的共
    享。

      我們再接著看以下的代碼。

    String str1 = new String("abc");
    String str2 = "abc";
    System.out.println(str1==str2); //false

      創建了兩個引用。創建了兩個對象。兩個引用分別指向不同的兩個對象。

    String str1 = "abc";
    String str2 = new String("abc");
    System.out.println(str1==str2); //false

      創建了兩個引用。創建了兩個對象。兩個引用分別指向不同的兩個對象。

      以上兩段代碼說明,只要是用new()來新建對象的,都會在堆中創建,而且其字
    符串是單獨存值的,即使與棧中的數據相同,也不會與棧中的數據共享。

      6. 數據類型包裝類的值不可修改。不僅僅是String類的值不可修改,所有的數
    據類型包裝類都不能更改其內部的值。 7. 結論與建議:

      (1)我們在使用諸如String str = "abc";的格式定義類時,總是想當然地認為
    ,我們創建了String類的對象str。擔心陷阱!對象可能并沒有被創建!唯一可以肯
    定的是,指向String類的引用被創建了。至于這個引用到底是否指向了一個新的對象
    ,必須根據上下文來考慮,除非你通過new()方法來顯要地創建一個新的對象。因此
    ,更為準確的說法是,我們創建了一個指向String類的對象的引用變量str,這個對
    象引用變量指向了某個值為"abc"的String類。清醒地認識到這一點對排除程序中難
    以發現的bug是很有幫助的。

      (2)使用String str = "abc";的方式,可以在一定程度上提高程序的運行速度
    ,因為JVM會自動根據棧中數據的實際情況來決定是否有必要創建新對象。而對于String
     str = new String("abc");的代碼,則一概在堆中創建新對象,而不管其字符串值
    是否相等,是否有必要創建新對象,從而加重了程序的負擔。這個思想應該是享元模
    式的思想,但JDK的內部在這里實現是否應用了這個模式,不得而知。

      (3)當比較包裝類里面的數值是否相等時,用equals()方法;當測試兩個包裝類
    的引用是否指向同一個對象時,用==。

      (4)由于String類的immutable性質,當String變量需要經常變換其值時,應該考
    慮使用StringBuffer類,以提高程序效率。
    posted @ 2005-09-26 10:13 ivaneeo 閱讀(668) | 評論 (0)編輯 收藏

    隨著Linux應用的擴展許多朋友開始接觸Linux,根據學習Windwos的經驗往往有一些茫然
    的感覺:不知從何處開始學起。這里介紹學習Linux的一些建議。

    一、從基礎開始:

    常常有些朋友在Linux論壇問一些問題,不過,其中大多數的問題都是很基礎的。例如:
    為什么我使用一個命令的時候,系統告訴我找不到該目錄,我要如何限制使用者的權限
    等問題,這些問題其實都不是很難的,只要了解了 Linux 的基礎之后,應該就可以很輕
    易的解決掉這方面的問題。而有些朋友們常常一接觸Linux 就是希望構架網站,根本沒
    有想到要先了解一下Linux 的基礎。這是相當困難的。

    二、Linux命令是必須學習

    雖然Linux桌面應用發展很快,但是命令在Linux中依然有很強的生命力。Linux是一個命
    令行組成的操作系統,精髓在命令行,無論圖形界面發展到什么水平這個原理是不會變的
    ,Linux命令有許多強大的功能:從簡單的磁盤操作、文件存取、到進行復雜的多媒體圖
    象和流媒體文件的制作。舉一個例子:Linux的常用命令find,察看man文檔,初學者一定會
    覺得太復雜而不原意用,但是你一旦學會就愛不釋手.它的功能實在太強了,在配合exec參
    數或者通過管道重定向到xargs命令和grep命令,可以完成非常復雜的操作,如果同樣的操
    作用圖形界面的工具來完成,恐怕要多花十幾陪的時間.

    不同版本的Linux命令數量不一樣,這里筆者把它們中比較重要的和使用頻率最多的命令
    ,按照它們在系統中的作用分成幾個部分介紹給大家,通過這些基礎命令的學習我們可
    以進一步理解Linux系統:

    安裝和登錄命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh

    文件處理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln

    系統管理相關命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd ki
    ll、 crontab、 tar、 unzip、 gunzip 、last

    網絡操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogi
    n rcp 、finger 、mail 、nslookup

    系統安全相關命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、
     pswho

    三、選擇一本好的工具書

    工具書對于學習者而言是相當重要的。一本錯誤觀念的工具書卻會讓新手整個誤入歧途
    。目前國內關于Linux的書籍有很多不過精品的不多,筆者強烈建議閱讀影印本的“O'R
    eilly原版Linux圖書http://www.oreilly.com.cn/  ”,而且出版社還提供了一個非常
    好的路線圖:http://www.oreilly.com.cn/guide/guide_linux.php 見圖-1。

    四、選擇一個適合你的Linux發行版本

    目前全球有超過1百多個Linux發行版本,在國內也能找到十幾個常見版本。如何選擇請
    根據你的需求和能力,Redhat Linux 和Debian Linux是網絡管理員的理想選擇。對于英
    語不是很好的讀者紅旗Linux、中標Linux這些中文版本比較適合。現在一些Linux網站有
    一些Linux版本的免費下載,這里要說的是并不適合Linux初學者。

    五、 養成在命令行下工作:

    一定要養成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的一個應
    用程序。在命令行下學習雖然一開始進度較慢,但是熟悉后,您未來的學習之路將是以
    指數增加的方式增長的。從網管員來說,命令行實際上就是規則,它總是有效的,同時
    也是靈活的。即使是通過一條緩慢的調制解調器線路,它也能操縱幾千公里以外地遠程
    系統。

    六、 選擇一個適合你的Linux社區;

    隨著Linux應用的擴展,出現了不少Linux社區。其中有一些非常優秀的社區:www.linu
    xforum.net(國內最高水平GNU站點)、http://www.chinaunix.net/ (中國最大的Uni
    x技術社區),但是這幾個論壇往往是Linux高手的舞臺,如果在探討高級技巧的論壇張
    貼非常初級的問題經常會沒有結果。推薦適于初學者的Linux社區:

    Linux伊甸園 http://www.linuxeden.com/

    中國Linux公社 http://www.linuxfans.org/nuke/index.php

    七、勤于實踐:

    要增加自己Linux 的技能,只有通過實踐來實現了。所以,趕快找一部計算機,趕快安
    裝一個 Linux 發行版本,然后進入精彩的Linux世界。相信對于你自己的 Linux 能力必
    然大有斬獲。此外,人腦不像計算機的硬盤一樣,除非硬盤壞掉了或者是資料被你抹掉
    了,否則儲存的資料將永遠而且立刻的記憶在硬盤中。在人類記憶的曲線中,你必須要
    不斷的重復練習才會將一件事情記得比較熟。同樣的,學習 Linux 也一樣,如果你無法
    經常學習的話,學了后面的,前面的忘了。你對Linux命令熟悉后你可以開始搭建一個小
    的Linux網絡,這是最好的實踐方法。Linux是網絡的代名詞,Linux網絡服務功能非常強
    大,不論是郵件服務器、Web服務器、DNS服務器等都非常完善。當然你不需搭建所有服
    務,可以慢慢來。需要說明的是這個Linux網絡對于初學者有兩三臺計算機即可,其中一
    臺計算機最好安裝Windows系統。自己多動手,不要非要等著別人幫你解決問題。

    七、 如何得到聯機幫助

    和私有操作系統不同,各個Linux的發行版本的技術支持時間都較短,這對于Linux初學
    者是往往不夠的。其實當你安裝了一個完整的Linux系統后其中已經包含了一個強大的幫
    助,只是可能你還沒有發現和使用它們的技巧。

    1. 主流Linux發行版都自帶非常詳細的文檔(包括手冊頁和FAQ),從系統安裝到系統安
    全,針對不同層次的人的詳盡文檔,仔細閱讀文檔后40%問題都可在此解決。

    2. 查閱經典工具書和Howto,特別是Howto是全球數以萬計的Linux、Unix的經驗總結非
    常有參考價值通常40%的問題同樣可以解決。

    八、在Linux論壇獲取幫助

    如果上面的措施沒有解決問題,此時你就需要Linux社區的幫助了。Linux的使用者一般
    都是專業人士,他們有著很好的電腦背景且愿意協助他人,Linux高手更具有鼓勵新手的
    文化精神。如何在Linux社區獲得幫助,需要說明的是你要有周全的思考,準備好你的問
    題,不要草率的發問,否則只會得到到草率的回答或者根本得 不到任何答案。越表現出
    在尋求幫助前為解決問題付出的努力,你越能得到實質性的幫助。最好先搜尋一下論壇
    是否有您需要的文章。這樣可以獲得事半功倍的效果。

    下面筆者在論壇看到的一個好問題:“安裝紅旗4.0 后,系統紫光輸入法自帶的雙拼方
    案和我的習慣不一樣,如何自定義雙拼方案解決?謝謝?”這個問題很簡練,筆者五分鐘
    后就給出了解決方法:“首先備份原文件到其他目錄,然后刪掉/usr/local/unispim/u
    nispimsp.ksc,編輯/usr/local/unispim/unispimsp.ini ,最后重啟動計算機,生成新
    的unispimsp.ksc”另外得到回復后如果問題解決,向幫助過你的人發個說明,讓他們知
    道問題是怎樣解決的,這種補充有助于他人在郵件列表/新聞組/論壇中搜索對你有過幫
    助的完整解決方案,這可能對他們也很有用。

    下面看看一個讓人無法回答的問題:“救命各位高手,向你們請教一些問題:如何在Li
    nux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服務器,謝謝” 這樣的問題我想即
    使Linux高手也很難快速準確精練的回答你。

    你需要提供精確有效的信息。這并不是要求你簡單的把成噸的出錯代碼或者數據完全轉
    儲摘錄到你的提問中。如果你有龐大而復雜的測試條件,盡量把它剪裁得越小越好。可
    能你會遇到這種情況,對于一個問題會出現不同內容回答,這時你需要通過實踐來驗證
    。另外把這個問題放在其他Linux社區請求幫助也是一種選擇。如果得不到答案,請不要
    以為我們覺得無法幫助你。有時只是看到你問題的人不知道答案罷了。這時換一個社區
    是不錯的選擇。

    另外發問的時候一定要注意到某些禮節。因為Linux社區是一個松散的組織、也不承擔回
    復每個帖子的義務。它不是技術支持。

    9.用Unix思維學習Linux

    Linux是參照Unix思想設計的,理解掌握Linux必須按照Unix思維來進行。思想性的轉變
    比暫時性的技術提高更有用,因為他能幫助你加快學習速度。

    10.學習專業英文

    如果你想深入學習Linux,看不懂因為文檔實在是太難了。寫的最好的,最全面的文檔都是
    英語寫的,最先發布的技術信息也都是用英語寫的。即便是非英語國家的人發布技術文檔
    ,也都首先翻譯成英語在國際學術雜志和網絡上發表。安裝一個新的軟件時先看README,
    再看INSTALL然后看FAQ,最后才動手安裝,這樣遇到問題就知道為什么。如果說明文檔不
    看,結果出了問題再去論壇來找答案反而浪費時間。

    11.最后是Linux學習的路線圖:

    1. 掌握至少50個以上的常用命令。  

    2. 熟悉Gnome/KDE等X-windows桌面環境操作 。

    3. 掌握.tgz、.rpm等軟件包的常用安裝方法

    4. 學習添加外設,安裝設備驅動程序(比如網卡)

    5. 熟悉Grub/Lilo引導器及簡單的修復操作 。

    6. 熟悉Linux文件系統 和目錄結構。

    7. 掌握vi,gcc,gdb等常用編輯器,編譯器,調試器 。

    8. 理解shell別名、管道、I/O重定向、輸入和輸出以及shell腳本編程。

    9. 學習Linux環境下的組網。
    posted @ 2005-09-26 10:08 ivaneeo 閱讀(588) | 評論 (0)編輯 收藏

    *深入分析Windows和Linux動態庫應用異同*
    **
    摘要:動態鏈接庫技術實現和設計程序常用的技術,在Windows和Linux系統中都有動態庫的概念,采用動態庫可以有效的減少程序大小,節省空間,提高效率

    ,增加程序的可擴展性,便于模塊化管理。

    但不同操作系統的動態庫由于格式 不同,在需要不同操作系統調用時需要進行動態庫程序移植。本文分析和比較了兩種操作系統動態庫技術,并給出了將Visual
    C++編制的動態庫移植到Linux上的方法和經驗。

    1、引言

    動態庫(Dynamic Link Library
    abbr,DLL)技術是程序設計中經常采用的技術。其目的減少程序的大小,節省空間,提高效率,具有很高的靈活性。

    采用動態庫技術對于升級軟件版本更加容易。與靜態庫(Static Link
    Library)不同,動態庫里面的函數不是執行程序本身的一部分,而是根據執行需要按需載入,其執行代碼可以同時在多個程序中共享。

    在Windows和Linux操作系統中,都可采用這種方式進行軟件設計,但他們的調用方式以及程序編制方式不盡相同。本文首先分析了在這兩種操作系統中通常采用的動態庫調用方法以及程序編制方式,然后分析比較了這兩種方式的不同之處,最后根據實際移植程序經驗,介紹了將VC++編制的Windows動態庫移植到Linux下的方法。

    2、動態庫技術

    2.1 Windows動態庫技術

    動態鏈接庫是實現Windows應用程序共享資源、節省內存空間、提高使用效率的一個重要技術手段。常見的動態庫包含外部函數和資源,也有一些動態庫只包含資源,如Windows字體資源文件,稱之為資源動態鏈接庫。
    通常動態庫以.dll,.drv、.fon等作為后綴。

    相應的windows靜態庫通常以.lib結尾,Windows自己就將一些主要的系統功能以動態庫模塊的形式實現。

    Windows動態庫在運行時被系統加載到進程的虛擬空間中,使用從調用進程的虛擬地址空間分配的內存,成為調用進程的一部分。DLL也只能被該進程的線程所訪問。DLL的句柄可以被調用進程使用;調用進程的句柄可以被DLL使用。

    DLL模塊中包含各種導出函數,用于向外界提供服務。DLL可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個DLL在內存中只有一個實例;DLL實現了代碼封裝性;DLL的編制與具體的編程語言及編譯器無關,可以通過DLL來實現混合語言編程。DLL函數中的代碼所創建的任何對象(包括變量)都歸調用它的線程或進程所有。
    根據調用方式的不同,對動態庫的調用可分為靜態調用方式和動態調用方式。

    (1)靜態調用,也稱為隱式調用,由編譯系統完成對DLL的加載和應用程序結束時DLL卸載的編碼(Windows系統負責對DLL調用次數的計數),調用方式簡單,能夠滿足通常的要求。
    通常采用的調用方式是把產生動態連接庫時產生的.LIB文件加入到應用程序的工程中,想使用DLL中的函數時,只須在源文件中聲明一下。

    LIB文件包含了每一個DLL導出函數的符號名和可選擇的標識號以及DLL文件名,不含有實際的代碼。Lib文件包含的信息進入到生成的應用程序中,被調用的DLL文件會在應用程序加載時同時加載在到內存中。

    (2)動態調用,即顯式調用方式,是由編程者用API函數加載和卸載DLL來達到調用DLL的目的,比較復雜,但能更加有效地使用內存,是編制大型應用程序時的重要方式。在Windows系統中,與動態庫調用有關的函數包括:

    ①LoadLibrary(或MFC 的AfxLoadLibrary),裝載動態庫。

    ②GetProcAddress,獲取要引入的函數,將符號名或標識號轉換為DLL內部地址。

    ③FreeLibrary(或MFC的AfxFreeLibrary),釋放動態鏈接庫。

    在windows中創建動態庫也非常方便和簡單。在Visual
    C++中,可以創建不用MFC而直接用C語言寫的DLL程序,也可以創建基于MFC類庫的DLL程序。每一個DLL必須有一個入口點,在VC++中,DllMain是一個缺省的入口函數。DllMain負責初始化(Initialization)和結束(Termination)工作。

    動態庫輸出函數也有兩種約定,分別是基于調用約定和名字修飾約定。DLL程序定義的函數分為內部函數和導出函數,動態庫導出的函數供其它程序模塊調用。通常可以有下面幾種方法導出函數:

    ①采用模塊定義文件的EXPORT部分指定要輸入的函數或者變量。

    ②使用MFC提供的修飾符號_declspec(dllexport)。

    ③以命令行方式,采用/EXPORT命令行輸出有關函數。

    在windows動態庫中,有時需要編寫模塊定義文件(.DEF),它是用于描述DLL屬性的模塊語句組成的文本文件。

    2.2 Linux共享對象技術

    在Linux操作系統中,采用了很多共享對象技術(Shared Object),雖然它和Windows里的動態庫相對應,但它并不稱為動態庫。
    相應的共享對象文件以.so作為后綴,
    為了方便,在本文中,對該概念不進行專門區分。Linux系統的/lib以及標準圖形界面的/usr/X11R6/lib等目錄里面,就有許多以so結尾的共享對象。

    同樣,在Linux下,也有靜態函數庫這種調用方式,相應的后綴以.a結束。Linux采用該共享對象技術以方便程序間共享,節省程序占有空間,增加程序的可擴展性和靈活性。Linux還可以通過LD-PRELOAD變量讓開發人員可以使用自己的程序庫中的模塊來替換系統模塊。
    同Windows系統一樣,在Linux中創建和使用動態庫是比較容易的事情,在編譯函數庫源程序時加上-shared選項即可,這樣所生成的執行程序就是動態鏈接庫。通常這樣的程序以so為后綴,在Linux動態庫程序設計過程中,通常流程是編寫用戶的接口文件,通常是.h文件,編寫實際的函數文件,以.c或.cpp為后綴,再編寫makefile文件。對于較小的動態庫程序可以不用如此,但這樣設計使程序更加合理。

    編譯生成動態連接庫后,進而可以在程序中進行調用。在Linux中,可以采用多種調用方式,同Windows的系統目錄(..\system32等)一樣,可以將動態庫文件拷貝到/lib目錄或者在/lib目錄里面建立符號連接,以便所有用戶使用。

    下面介紹Linux調用動態庫經常使用的函數,但在使用動態庫時,源程序必須包含dlfcn.h頭文件,該文件定義調用動態鏈接庫的函數的原型。

    (1)_打開動態鏈接庫:dlopen,函數原型void *dlopen (const char *filename, int flag);
    dlopen用于打開指定名字(filename)的動態鏈接庫,并返回操作句柄。

    (2)取函數執行地址:dlsym,函數原型為: void *dlsym(void *handle, char *symbol);
    dlsym根據動態鏈接庫操作句柄(handle)與符號(symbol),返回符號對應的函數的執行代碼地址。

    (3)關閉動態鏈接庫:dlclose,函數原型為: int dlclose (void *handle);
    dlclose用于關閉指定句柄的動態鏈接庫,只有當此動態鏈接庫的使用計數為0時,才會真正被系統卸載。

    (4)動態庫錯誤函數:dlerror,函數原型為: const char *dlerror(void);
    當動態鏈接庫操作函數執行失敗時,dlerror可以返回出錯信息,返回值為NULL時表示操作函數執行成功。

    在取到函數執行地址后,就可以在動態庫的使用程序里面根據動態庫提供的函數接口聲明調用動態庫里面的函數。在編寫調用動態庫的程序的makefile文件時,需要加入編譯選項-rdynamic和-ldl。

    除了采用這種方式編寫和調用動態庫之外,Linux操作系統也提供了一種更為方便的動態庫調用方式,也方便了其它程序調用,這種方式與Windows系統的隱式鏈接類似。其動態庫命名方式為"lib*.so.*"。在這個命名方式中,第一個*表示動態鏈接庫的庫名,第二個*通常表示該動態庫的版本號,也可以沒有版本號

    在這種調用方式中,需要維護動態鏈接庫的配置文件/etc/ld.so.conf來讓動態鏈接庫為系統所使用,通常將動態鏈接庫所在目錄名追加到動態鏈接庫配置文件中。如具有X
    window窗口系統發行版該文件中都具有/usr/X11R6/lib,它指向X window窗口系統的動態鏈接庫所在目錄。

    為了使動態鏈接庫能為系統所共享,還需運行動態鏈接庫的管理命令./sbin/ldconfig。在編譯所引用的動態庫時,可以在gcc采用
    –l或-L選項或直接引用所需的動態鏈接庫方式進行編譯。在Linux里面,可以采用ldd命令來檢查程序依賴共享庫。
    3、兩種系統動態庫比較分析

    Windows和Linux采用動態鏈接庫技術目的是基本一致的,但由于操作系統的不同,他們在許多方面還是不盡相同,下面從以下幾個方面進行闡述。

    (1)動態庫程序編寫,在Windows系統下的執行文件格式是PE格式,動態庫需要一個DllMain函數作為初始化的人口,通常在導出函數的聲明時需要有_declspec(dllexport)關鍵字。Linux下的gcc編譯的執行文件默認是ELF格式,不需要初始化入口,亦不需要到函數做特別聲明,編寫比較方便。

    (2)動態庫編譯,在windows系統下面,有方便的調試編譯環境,通常不用自己去編寫makefile文件,但在linux下面,需要自己動手去編寫makefile文件,因此,必須掌握一定的makefile編寫技巧,另外,通常Linux編譯規則相對嚴格。

    (3)動態庫調用方面,Windows和Linux對其下編制的動態庫都可以采用顯式調用或隱式調用,但具體的調用方式也不盡相同。

    (4)動態庫輸出函數查看,在Windows中,有許多工具和軟件可以進行查看DLL中所輸出的函數,例如命令行方式的dumpbin以及VC++工具中的DEPENDS程序。在Linux系統中通常采用nm來查看輸出函數,也可以使用ldd查看程序隱式鏈接的共享對象文件。

    (5)對操作系統的依賴,這兩種動態庫運行依賴于各自的操作系統,不能跨平臺使用。因此,對于實現相同功能的動態庫,必須為兩種不同的操作系統提供不同的動態庫版本。

    4、動態庫移植方法

    如果要編制在兩個系統中都能使用的動態鏈接庫,通常會先選擇在Windows的VC++提供的調試環境中完成初始的開發,畢竟VC++提供的圖形化編輯和調試界面比vi和gcc方便許多。完成測試之后,再進行動態庫的程序移植。

    通常gcc默認的編譯規則比VC++默認的編譯規則嚴格,即使在VC++下面沒有任何警告錯誤的程序在gcc調試中也會出現許多警告錯誤,可以在gcc中采用-w選項關閉警告錯誤。

    下面給出程序移植需要遵循的規則以及經驗。

    (1)盡量不要改變原有動態庫頭文件的順序。通常在C/C++語言中,頭文件的順序有相當的關系。另外雖然C/C++語言區分大小寫,但在包含頭文件時,Linux必須與頭文件的大小寫相同,因為ext2文件系統對文件名是大小寫敏感,否則不能正確編譯,而在Windows下面,頭文件大小寫可以正確編譯。

    (2)不同系統獨有的頭文件。在Windows系統中,通常會包括windows.h頭文件,如果調用底層的通信函數,則會包含winsock..h頭文件。因此在移植到Linux系統時,要注釋掉這些Windows系統獨有的頭文件以及一些windows系統的常量定義說明,增加Linux都底層通信的支持的頭文件等。

    (3)數據類型。VC++具有許多獨有的數據類型,如__int16,__int32,TRUE,SOCKET等,gcc編譯器不支持它們。
    通常做法是需要將windows.h和basetypes.h中對這些數據進行定義的語句復制到一個頭文件中,
    再在Linux中包含這個頭文件。例如將套接字的類型為SOCKET改為int。
    (4)關鍵字。VC++中具有許多標準C中所沒有采用的關鍵字,如BOOL,BYTE,DWORD,__asm等,通常在為了移植方便,盡量不使用它們,如果實在無法避免可以采用#ifdef
    和#endif為LINUX和WINDOWS編寫兩個版本。

    (5)函數原型的修改。通常如果采用標準的C/C++語言編寫的動態庫,基本上不用再重新編寫函數,但對于系統調用函數,由于兩種系統的區別,需要改變函數的調用方式等,如在Linux編制的網絡通信動態庫中,用close()函數代替windows操作系統下的closesocket()函數來關閉套接字。另外在Linux下沒有文件句柄,要打開文件可用open和fopen函數,具體這兩個函數的用法可參考文獻[2]。

    (6)makefile的編寫。在windows下面通常由VC++編譯器來負責調試,但gcc需要自己動手編寫makefile文件,也可以參照VC++生成的makefile文件。對于動態庫移植,編譯動態庫時需要加入-shared選項。對于采用數學函數,如冪級數的程序,在調用動態庫是,需要加入-lm。

    (7)其它一些需要注意的地方

    ①程序設計結構分析,對于移植它人編寫的動態庫程序,程序結構分析是必不可少的步驟,通常在動態庫程序中,不會包含界面等操作,所以相對容易一些。

    ②在Linux中,對文件或目錄的權限分為擁有者、群組、其它。所以在存取文件時,要注意對文件是讀還是寫操作,如果是對文件進行寫操作,要注意修改文件或目錄的權限,否則無法對文件進行寫。

    ③指針的使用,定義一個指針只給它分配四個字節的內存,如果要對指針所指向的變量賦值,必須用malloc函數為它分配內存或不把它定義為指針而定義為變量即可,這點在linux下面比windows編譯嚴格。同樣結構不能在函數中傳值,如果要在函數中進行結構傳值,必須把函數中的結構定義為結構指針。

    ④路徑標識符,在Linux下是"/",在Windows下是"\",注意windows和Linux的對動態庫搜索路徑的不同。

    ⑤編程和調試技巧方面。對不同的調試環境有不同的調試技巧,在這里不多敘述。

    5、結束語

    本文系統分析了windows和Linux動態庫實現和使用方式,從程序編寫、編譯、調用以及對操作系統依賴等方面綜合分析比較了這兩種調用方式的不同之處,根

    據實際程序移植經驗,給出了將VC++編制的Windows動態庫移植到Linux下的方法以及需要注意的問題,同時并給出了程序示例片斷,實際在程序移植過程中,由于系統的設計等方面,可能移植起來需要注意的方面遠比上面復雜,本文通過總結歸納進而為不同操作系統程序移植提供了有意的經驗和技巧。
    靖網先鋒

    posted @ 2005-09-26 10:04 ivaneeo 閱讀(1383) | 評論 (0)編輯 收藏

    安裝Adobe AcrobatReader 7.0中文版

    • RPM包安裝

    1. 下RPM安裝包

    $ wget http://ardownload.adobe.com/pub/adobe/reader/unix/7x/7.0/chs/AdobeReader_chs-7.0.0-2.i386.rpm

    2. 轉換RPM包為DEB包,并安裝

    $ sudo alien AdobeReader_chs-7.0.0-2.i386.rpm
    $ sudo dpkg -i adobereader-chs_7.0.0-3_i386.deb

    3. 建立acroread執行腳本鏈接

    $ sudo ln -sf /usr/local/Adobe/Acrobat7.0/bin/acroread /usr/bin/acroread
    • tar.gz包安裝(推薦)

    1. 下載tar.gz安裝包

    $ wget http://ardownload.adobe.com/pub/adobe/reader/unix/7x/7.0/chs/AdbeRdr70_linux_chs.tar.gz

    2. 安裝軟件包

    $ tar zxvf AdbeRdr70_linux_chs.tar.gz
    $ sudo AdobeReader/INSTALL
    $ sudo ln -sf /usr/local/Adobe/Acrobat7.0/bin/acroread /usr/bin/acroread

    3. 設置程序菜單項

    $ sudo vi /usr/share/applications/AcrobatReader.desktop

    //輸入如下內容
    [Desktop Entry]
    Name=Acrobat Reader 7
    Comment=Acrobat Reader 7
    Exec=/usr/local/Adobe/Acrobat7.0/bin/acroread
    Icon=/usr/local/Adobe/Acrobat7.0/Resource/Icons/AdobeReader.png
    Terminal=false
    Type=Application
    Categories=Application;Office;
    • 在Nautilus中建立PDF文件與Acrobat Reader的關聯
    • 在Firefox中安裝Acrobat Reader插件
    $ sudo /usr/local/Adobe/Acrobat7.0/Browser/install_browser_plugin
    將安裝瀏覽器的 acroread 增效工具。

    請輸入 Adobe Reader 7.0.0 的安裝路徑。 [/usr/local/Adobe/Acrobat7.0]

    1. 執行全局安裝
    2. 執行用戶指定的安裝 (Mozilla/Firefox/Netscape)
    請輸入您的選擇 [1/2] 1

    請輸入瀏覽器安裝路徑 - /usr/lib/mozilla-firefox
    安裝成功。添加文件 /usr/lib/mozilla-firefox/plugins/nppdf.so

    您是否要安裝另一個瀏覽器? [y/n] n
    • 刪除已安裝的Acrobat Reader
    $ sudo rm -rf /usr/local/Adobe/Acrobat7.0/
    $ sudo rm /usr/share/applications/AdobeReader.desktop
    $ sudo rm /usr/bin/acroread


    安裝Yahoo Messenger (推薦使用gaim代替)

    1. 下載DEB包

    $ wget http://download.yahoo.com/dl/unix/ymessenger_1.0.4_1_i386.deb

    2. 安裝

    $ sudo apt-get install libgdk-pixbuf2 libglib1.2 libgtk1.2 libssl0.9.6 $ sudo dpkg -i ymessenger_1.0.4_1_i386.deb

    3. 運行

    $ /usr/bin/ymessenger &


    安裝Prozilla GUI

    1. 安裝

    $ sudo apt-get install prozgui

    2. 設置

    $ sudo vi /usr/share/applications/prozgui.desktop

    //輸入如下內容
    [Desktop Entry]
    Name=Prozilla GUI
    Comment=Prozilla Downloader GUI
    Exec=/usr/bin/prozgui
    Icon=/usr/share/pixmaps/prozgui.xpm
    Terminal=false
    Type=Application
    Categories=Application;Network;


    安裝NeroLinux 2.0.0

    1. 下載NeroLinux的deb包

    $ wget ftp://ftp5.us.nero.com/nerolinux-2.0.0.2-x86.deb

    2. 安裝NeroLinux依賴的包

    $ sudo apt-get install libglib1.2 libgtk1.2

    3. 安裝NeroLinux包

    $ sudo dpkg -i nerolinux-2.0.0.2-x86.deb

    4. 啟動NeroLinux程序 選擇菜單“Applications”=>“System Tools”=>“NeroLINUX”啟動程序。



    配置使用ADSL帳號撥號上網

    1、安裝pppoe軟件包

    $ sudo apt-get install pppoeconf

    2、配置adsl撥號的帳號信息

    $ sudo pppoeconf

    3、進行adsl撥號建立網絡連接

    $ sudo pon dsl-provider

    4、斷開adsl網絡連接

    $ sudo poff



    $ killall gnome-panel

    3. 使用 選擇“Applications”=>“Internet”=>“Prozilla GUI”。



    posted @ 2005-09-23 13:58 ivaneeo 閱讀(859) | 評論 (0)編輯 收藏

    4.用私鑰對加密文件解密


    #gpg --decrypt report.txt.gpg >report.txt
    You need a passphrase to unlock the secret key for
    user: "test1 (unclassfication) "
    2048-bit ELG-E key, ID 33735683, created 2004-09-29
    (main key ID 79EB3D97)
    gpg: encrypted with 2048-bit ELG-E key, ID 33735683,
    created 2004-09-29
    "test1 (unclassfication) "


    以上命令要求輸入對應私鑰的保護口令才能成功解密,解密后的文件內容被輸出到report.txt文件中。

    5.用公鑰同時進行文件簽名和加密

    #gpg -se -r test@yahoo.com.cn  report.txt
    You need a passphrase to unlock the secret key for
    user: "test (test) "
    1024-bit DSA key, ID ADD93830, created 2004-07-01


    以上命令要求輸入對應私鑰的保護口令,輸入正確的口令后,簽名和加密成功完成。

    這些都是應用GPG簽名和加密文件的一些常用命令,更詳細的用法可以參考GPG的幫助文件。

    對電子郵件進行加密和數字簽名

    實際上,GPG應用最多的地方是在電子郵件的加密和數字簽名上。許多電子郵件客戶端軟件都支持PGP/GPG方式的加密及數字簽名。
    posted @ 2005-09-22 14:46 ivaneeo 閱讀(298) | 評論 (0)編輯 收藏

    應用GPG

    GPG使用的是非對稱的密鑰體系,用戶擁有一對密鑰,包括一個公鑰和一個私鑰。公鑰對外公布,私鑰則由自己保存。使用公鑰加密的數據可以用私鑰解密,同樣,使用私鑰加密的數據可以用公鑰解密。

    非對稱的密鑰可以用來加密和做數字簽名。當用戶關心信息保密性時,使用加密功能;當用戶關注信息完整性及不可抵賴性時,使用數字簽名功能;當用戶需要同時關注信息的機密性、完整性及不可抵賴性時,可以將加密和數學簽名混合使用。

    簡單了解這些密碼學概念后,就可以開始真正的應用實踐了。

    對文件進行加密和數字簽名

    KDE中提供了圖形化的加密操作方法。比如,在KDE中對一個文件加密,只需在KDE文件管理器Konqueror中選中該文件,單擊右鍵選擇“Actions”中的“Encrypt File”就可以加密文件。加密后的文件以.asc結尾。

    對于圖形方式的加密操作不多做介紹,下面將重點放在命令行操作方式上,介紹命令行下的各種文件加密和簽名的操作方法。

    1.對文件進行數字簽名

    #gpg --clearsign policy.txt
    You need a passphrase to unlock the secret key for
    user: "test (test) <test@yahoo.com.cn>"
    1024-bit DSA key, ID ADD93830, created 2004-07-01


    運行以上命令,生成一個名為report.txt.asc的文件,該文件中除了原文件信息外還包含數字簽名信息。

    2.驗證文件的數字簽名

    #gpg --verify policy.txt.asc
    gpg: Signature made 2004年11月04日 星期四 15時58分07秒 UTC using DSA key ID ADD93830
    gpg: Good signature from "test (test) <test@yahoo.com.cn>"


    以上命令運行的結果顯示該簽名是正確的。

    3.用指定的公鑰對文件加密

    #gpg --encrypt -r terry@mykms.org report.txt
    gpg: checking the trustdb
    gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
    gpg: next trustdb check due at 2005-09-10


    運行以上命令,使用自己的公鑰加密report.txt文件,生成加密文件report.txt.gpg。如果使用編輯軟件打開該加密文件,會發現它包含的是一些不可理解的字符和亂碼。
    posted @ 2005-09-22 14:43 ivaneeo 閱讀(271) | 評論 (0)編輯 收藏

    導入公鑰

    作為用戶,也會收到別人的GPG公鑰,它們可能來自網站、電子郵件、FTP和目錄服務等,只要信任其來源,就可以將其導入自己的GPG環境,之后才可以與相應的人員進行基于GPG的各種應用。 導入公鑰的過程可以分為以下三步:

    1.導入

    比如,Terry收到朋友god3571的公鑰文件god3571.gpg,可以使用以下命令導入文件:
    snapshot14.png

    2.核對“指紋”

    公鑰是可以偽造的。James可以偽造一個god3571的公鑰,然后想辦法讓Terry得到。如果Terry對收到的公鑰不加驗證,那么他 發給god3571的加密郵件就可能被James解密。GPG的架構中并沒有一個PKI這樣的證書管理系統,GPG的公鑰信任是通過“Truth Web”實現的。

    生成Terry公鑰的“指紋”:

    #gpg --fingerprint terry@mykms.org
    pub 1024D/7234E374 2004-09-10 Terry
    Yu (for test) <terry@mykms.org>
    Key fingerprint = A58F D71A 28BA
    499D 805B 588E 82FB CD0F 7234 E374
    sub 2048g/4907EA0A 2004-09-10 [expires: 2005-09-10]

    3.簽名

    在成功導入,并確定這個公鑰是可以相任之后,要立即對這個公鑰進行簽名。這樣,就可以驗證來自對方郵件的真實性了。

    對公鑰進行簽名可以使用如下命令:

    #gpg --sign-key god3571@hotmail.com

    或者
    #gpg --edit-key name
    #command > sign

    檢查對方郵件,比如god3571的簽名:
    #gpg --check-sigs god3571@hotmail.com
     現在,有了god3571簽名的公鑰,通過這個公鑰就可以和god3571進行非對稱加密通信了。
    posted @ 2005-09-22 14:38 ivaneeo 閱讀(266) | 評論 (0)編輯 收藏

    僅列出標題
    共67頁: First 上一頁 36 37 38 39 40 41 42 43 44 下一頁 Last 
    主站蜘蛛池模板: 久久91亚洲精品中文字幕| 国产成人精品日本亚洲专| 日本人成在线视频免费播放| 亚洲熟妇av一区二区三区下载| 午夜免费福利影院| 国产日韩在线视频免费播放| 久久久久亚洲精品无码蜜桃| 午夜一级毛片免费视频| 黄网站免费在线观看| 日本亚洲免费无线码| 亚洲日韩aⅴ在线视频| 噼里啪啦电影在线观看免费高清| 色噜噜噜噜亚洲第一| 中文字幕亚洲日韩无线码| 亚洲欧洲日产国码www| www.亚洲精品.com| 18勿入网站免费永久| 国产黄在线播放免费观看| 激情综合亚洲色婷婷五月| 亚洲日韩国产成网在线观看| 999国内精品永久免费观看| jizz免费观看| 亚洲日本VA午夜在线电影| 亚洲大成色www永久网站| 免费大黄网站在线观| 无码av免费毛片一区二区| 中文字幕免费在线看电影大全 | 九九美女网站免费| 人人狠狠综合久久亚洲| 亚洲视频2020| 久久久久久亚洲精品不卡| 日韩视频免费在线| 成人在线免费看片| 久久国产精品成人免费| 一边摸一边桶一边脱免费视频 | 亚洲日韩国产欧美一区二区三区 | 国产成人精品免费视频大| 中文在线免费视频| 国产精品亚洲一区二区无码 | 亚洲妇女水蜜桃av网网站| 亚洲高清专区日韩精品|