Thông báo

Collapse
No announcement yet.

Lập trinh C và C++ cho Linux/Unix

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Lập trinh C và C++ cho Linux/Unix

    Cả nhà ới ời! Em mới bắt đầu học về hđh Linux mà ban đầu là lập trình C cho Linux. Các đàn anh có chỉ dẫn gì cho em học hỏi zới

  • #2
    admin mike của diễn đàn là cao thủ về linux )
    Dấu hỏi vòng vòng
    Dấu ngã cong cong
    Khi ngã ta lại hỏi
    Ngã lần này có đứng dậy nữa không

    Comment


    • #3
      hic!Đợi mỏi cả 2 con mắt mới có 1 cao thủ xuất hiện lại bảo hỏi người khác. Chán quá...

      Comment


      • #4
        Rất đơn giản.

        Bạn sử dụng 1 phần mềm text nào đó, gedit chẳng hạn. Và bắt đầu với helloworld.c như truyền thống của các thầy QTN, NTT.

        Sau đó bạn đánh lệnh:
        $gcc helloworld.c
        $ ./a.out

        hoặc

        $gcc -c helloworld.c -o hello
        $./hello

        Yêu cầu: có kiến thức đầy đủ về MS DOS
        Opentdoors- Thành viên của Rock'n'Roll club

        Comment


        • #5
          Nên dùng một cái IDE, cái mà F recommend đó là eclipse.

          Chúc vui
          Falleaf
          Công ty TNHH Thương mại và Giao nhận R&P
          58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
          mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

          Comment


          • #6
            Nguyên văn bởi opentdoors Xem bài viết
            Rất đơn giản.

            Bạn sử dụng 1 phần mềm text nào đó, gedit chẳng hạn. Và bắt đầu với helloworld.c như truyền thống của các thầy QTN, NTT.

            Sau đó bạn đánh lệnh:
            $gcc helloworld.c
            $ ./a.out

            hoặc

            $gcc -c helloworld.c -o hello
            $./hello

            Yêu cầu: có kiến thức đầy đủ về MS DOS
            Linux về bản chất chính là Unix mà C là ngôn ngữ vốn được phát minh ra để lập trình nên hệ điều hành Unix nên lập trình C trong Linux rất thân thiện và dễ dàng như opentdoors đã hướng dẫn. Tuy nhiên để viết chương trình làm được nhiều việc hơn Hello world thì còn nhiều điều phải học.

            Bạn sẽ cần phân biệt trình biên dịch thô và môi trường phát triển IDE. Trên nền Windows, chương trình thường là kiểu tất cả trong một như Visual C++ : vừa là trình soạn thảo văn bản, vừa biên dịch (compile), vừa liên kết (link), vừa dò lỗi (debug). Triết lý chung của Unix là sử dụng nhiều công cụ nhỏ, mỗi công cụ chỉ làm một việc và làm việc đó thật tốt, kết hợp các công cụ nhỏ với nhau. Với Linux, trình biên dịch là gcc (cho C++ là g++), trình soạn thảo văn bản riêng - bạn có thể dùng bất kỳ cái gì bạn thích, dò lỗi là gdb; môi trường IDE có thể là Kdevelop (nền KDE), CodeBlocks, Anjuta (nền Gnome), hoặc Eclipse (nền Java)

            (còn tiếp)...
            Phần mềm tự do hoặc không dùng máy tính nữa !.

            Comment


            • #7
              Đối với Visual Studio (IDE của MS), thì mọi thứ đều nằm trên đó, khi làm việc với nó, người ta sẽ có những thói quen nhất định. Một công cụ soạn thảo bất kỳ, có thể làm được khá nhiều việc. Tuy nhiên việc quản lý hệ thống, mới là việc mà các trình IDE chuyên dụng hỗ trợ nhiều.

              Quan điểm làm việc nào cũng có cái tốt của nó, như một trình soạn thảo, từ việc tăng cường một số chức năng chỉnh sửa, rồi sau đó là tìm kiếm, rồi đến một số chức năng thêm thắt các nút để thay vì người ta phải gõ lệnh thì có thể bấm nút một cái chạy luôn,... Kết quả, tổng hợp nhiều thứ thường dùng đó lại, người ta đưa ra một công cụ là môi trường soạn thảo hay môi trường phát triển IDE.

              Như vậy, ở đây vấn đề là tư duy phân chia công việc như thế nào. Ngay cả trên windows cũng có hàng loạt chương trình soạn thảo như: notepad, wordpad, notepad++, winedit, winedt, texmaker, ultraedit,... rất rất nhiều. Tương tự trên linux cũng vậy.

              Tuy nhiên, sau một thời gian làm việc, chúng ta thấy rằng với mỗi một chương trình dịch, với mỗi một công cụ, nếu cứ phân việc nhỏ ra, thì kết quả là người ta có hàng tá việc phải làm thay cho việc bấm một cái nút.

              Vậy thì mỗi lần chuyển đổi từ cái này sang cái khác, người ta sẽ gặp một vấn đề là cứ phải đi học hết cái này tới cái khác. Kết quả giải pháp là người ta gom một số thứ lại với nhau, tạo thành giải pháp cho một lớp các vấn đề. Cũng giống như người ta gom lại các vấn đề về ngôn ngữ theo kiểu MS, học C# thì coi như khỏi học các ngôn ngữ lập trình khác. Nhưng có thể người ta lại nghĩ theo kiểu Java là khỏi phải lo các platform.

              Do vậy, theo cá nhân F nghĩ, thì không nên cứng nhắc với những hệ thống quan điểm, mà nên lựa chọn công cụ sử dụng theo từng thời điểm và từng đối tượng lao động trên công cụ đó.

              Quan điểm và tư tưởng, định hướng,... cái nào dài, cái nào ngắn? Đánh giá sự phát triển của Eclipse trong thời gian qua, F vẫn recommend cái Eclipse cho việc phát triển phần mềm.

              F rất muốn đọc tiếp các bài viết giới thiệu của bạn bqviet, phải nói rằng các bài viết của bạn rất ngắn, xúc tích và cung cấp khá nhiều thông tin cho người đọc. F thì viết lúc nào cũng dài dòng văn tự.

              Chúc vui.
              Falleaf
              Công ty TNHH Thương mại và Giao nhận R&P
              58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
              mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

              Comment


              • #8
                Sau này xài quen rồi, cho tất cả những thứ như java,c, cpp thậm chí script vào cái makefile là xong.
                Opentdoors- Thành viên của Rock'n'Roll club

                Comment


                • #9
                  Nguyên văn bởi falleaf Xem bài viết
                  Đối với Visual Studio (IDE của MS), thì mọi thứ đều nằm trên đó, khi làm việc với nó, người ta sẽ có những thói quen nhất định. Một công cụ soạn thảo bất kỳ, có thể làm được khá nhiều việc. Tuy nhiên việc quản lý hệ thống, mới là việc mà các trình IDE chuyên dụng hỗ trợ nhiều.

                  Quan điểm làm việc nào cũng có cái tốt của nó, như một trình soạn thảo, từ việc tăng cường một số chức năng chỉnh sửa, rồi sau đó là tìm kiếm, rồi đến một số chức năng thêm thắt các nút để thay vì người ta phải gõ lệnh thì có thể bấm nút một cái chạy luôn,... Kết quả, tổng hợp nhiều thứ thường dùng đó lại, người ta đưa ra một công cụ là môi trường soạn thảo hay môi trường phát triển IDE.

                  Như vậy, ở đây vấn đề là tư duy phân chia công việc như thế nào. Ngay cả trên windows cũng có hàng loạt chương trình soạn thảo như: notepad, wordpad, notepad++, winedit, winedt, texmaker, ultraedit,... rất rất nhiều. Tương tự trên linux cũng vậy.

                  Tuy nhiên, sau một thời gian làm việc, chúng ta thấy rằng với mỗi một chương trình dịch, với mỗi một công cụ, nếu cứ phân việc nhỏ ra, thì kết quả là người ta có hàng tá việc phải làm thay cho việc bấm một cái nút.

                  Vậy thì mỗi lần chuyển đổi từ cái này sang cái khác, người ta sẽ gặp một vấn đề là cứ phải đi học hết cái này tới cái khác. Kết quả giải pháp là người ta gom một số thứ lại với nhau, tạo thành giải pháp cho một lớp các vấn đề. Cũng giống như người ta gom lại các vấn đề về ngôn ngữ theo kiểu MS, học C# thì coi như khỏi học các ngôn ngữ lập trình khác. Nhưng có thể người ta lại nghĩ theo kiểu Java là khỏi phải lo các platform.

                  Do vậy, theo cá nhân F nghĩ, thì không nên cứng nhắc với những hệ thống quan điểm, mà nên lựa chọn công cụ sử dụng theo từng thời điểm và từng đối tượng lao động trên công cụ đó.

                  Quan điểm và tư tưởng, định hướng,... cái nào dài, cái nào ngắn? Đánh giá sự phát triển của Eclipse trong thời gian qua, F vẫn recommend cái Eclipse cho việc phát triển phần mềm.

                  F rất muốn đọc tiếp các bài viết giới thiệu của bạn bqviet, phải nói rằng các bài viết của bạn rất ngắn, xúc tích và cung cấp khá nhiều thông tin cho người đọc. F thì viết lúc nào cũng dài dòng văn tự.

                  Chúc vui.


                  Cá nhân tôi cũng không có ý nói rằng cái nào hay hơn, tất cả là phụ thuộc vào người sử dụng. Càng không muốn khơi ra một flame war kiểu như "small tools vs IDE". Cộng đồng phần mềm mã mở / tự do đã có quá nhiều sự kiện thế rồi: nào là giấy phép GPL vs BSD vs MIT vs ..., rồi monolithic kernel vs micro kernel, hay Emacs vs Vi vs Vim ...

                  Lưu ý F là Eclipse thực ra cũng không phải là một IDE đầy đủ, nó chỉ gồm trình soạn thảo văn bản và các plug-in khác nhau đóng vai trò front-end, khi biên dịch mã nguồn nó vẫn phải gọi trình biên dịch thô cấp dưới. Các chương trình khác như Kdevelop, CodeBlocks, Anjuta cũng vậy. Bản chất của chúng là một cái giao diện đồ họa đẹp bao bọc bên trên những công cụ giao diện dòng lệnh cấp dưới cho tiện lợi và dễ sử dụng.

                  Danh sách đầy đủ các loại IDE có ở đây: http://en.wikipedia.org/wiki/List_of...t_environments
                  Tôi khuyến cáo nên sử dụng 3 IDE trên vì
                  • Chúng vốn đã được phát triển từ lâu và nhiều chức năng
                  • Miễn phí, mã mở, tự do
                  • Cộng đồng hỗ trợ đằng sau đông đảo


                  Kdevelop là một IDE cực kỳ tốt nếu bạn vốn đã sử dụng môi trường đồ họa KDE (như Kubuntu chẳng hạn). Bộ tiện ích có sẵn và trong các plug-in của nó có thể sánh ngang ngửa với Visual Studio, nếu không muốn nói tốt hơn. Tài liệu hướng dẫn cũng đầy đủ, nhược điểm duy nhất là yêu cầu KDE.

                  Anjuta cũng có chức năng tương tự so với Kdevelop, nhưng yêu cầu môi trường Gnome.

                  CodeBlocks phát triển trên nền thư viện wxWidgets nên có thể chạy trên bất cứ hệ điều hành nào mà wxWidgets chạy (Linux, BSD Unix, Solaris, Mac, Windows đủ loại). Nhược điểm chính của cái này là tài liệu hướng dẫn rất kém. Bù lại nó hỗ trợ SDCC để lập trình cho PIC và 8051 nên có lẽ thích hợp với dân làm điện tử.
                  Phần mềm tự do hoặc không dùng máy tính nữa !.

                  Comment


                  • #10
                    Nguyên văn bởi falleaf Xem bài viết
                    Nên dùng một cái IDE, cái mà F recommend đó là eclipse.

                    Chúc vui
                    Với những ai chưa từng sử dụng Eclipse, có một bài giới thiệu khá hay và thực tế ở đây
                    http://www.ibm.com/developerworks/op...1EclipsePrimer

                    Sau khi có cái nhìn bao quát chung về công cụ này, chuyển sang đọc tài liệu chi tiết mới thích hợp.
                    Phần mềm tự do hoặc không dùng máy tính nữa !.

                    Comment


                    • #11
                      Nguyên văn bởi bqviet Xem bài viết
                      Lưu ý F là Eclipse thực ra cũng không phải là một IDE đầy đủ, nó chỉ gồm trình soạn thảo văn bản và các plug-in khác nhau đóng vai trò front-end, khi biên dịch mã nguồn nó vẫn phải gọi trình biên dịch thô cấp dưới. Các chương trình khác như Kdevelop, CodeBlocks, Anjuta cũng vậy. Bản chất của chúng là một cái giao diện đồ họa đẹp bao bọc bên trên những công cụ giao diện dòng lệnh cấp dưới cho tiện lợi và dễ sử dụng.
                      Em thấy thằng VC++ hình như nó cũng thế mà, khi dịch, link, debug nó đều gọi đến chương trình ngoài đó thôi. Nó cũng support việc xài Makefile nữa thì phải he he he - đua đòi theo Linux
                      Lắm thằng SV Tây nghèo cóc có tiền mua VS nó toàn phải dùng bộ SDK free rồi xài dòng lệnh như trên Linux chết cười
                      Some rights reserved!

                      Comment


                      • #12
                        Nguyên văn bởi vutamhoan Xem bài viết
                        Em thấy thằng VC++ hình như nó cũng thế mà, khi dịch, link, debug nó đều gọi đến chương trình ngoài đó thôi. Nó cũng support việc xài Makefile nữa thì phải he he he - đua đòi theo Linux
                        Lắm thằng SV Tây nghèo cóc có tiền mua VS nó toàn phải dùng bộ SDK free rồi xài dòng lệnh như trên Linux chết cười
                        Bạn nói đúng. Về bản chất VC++ cũng dùng trình dịch dòng lệnh riêng và nmake. Trước đây những ai muốn biên dịch lại MFC đều phải dùng trực tiếp những công cụ này.

                        Dùng dòng lệnh không phải vì nghèo, cũng không phải vì là tay mơ hay ra vẻ hacker. Đơn giản là người dùng quen với nó và thấy nó hiệu quả hơn. Nếu bạn dùng nhiều nền hệ điều hành một lúc sẽ thấy ngay giá trị của một chương trình soạn thảo văn bản chạy khắp nơi, một trình biên dịch chạy khắp nơi ... thay vì với mỗi hđh lại phải học một cái IDE riêng. Chỉ cần chuyển qua lại giữa Linux, Windows, FreeBSD Unix (chưa tính MacOS) ... là đủ chết rồi. Và sẽ còn đánh giá cao nữa nếu làm nhúng.
                        Phần mềm tự do hoặc không dùng máy tính nữa !.

                        Comment


                        • #13
                          Make và makefile

                          (tiếp theo, 2)

                          Sau khi đã hiểu được triết lý chia nhỏ công cụ của Linux và làm quen với trình dịch dòng lệnh gccg++, bước tiếp theo là tìm hiểu về make.

                          Trừ khi viết ví dụ đơn giản cỡ 20 dòng lệnh, bất kỳ chương trình có ích nào cũng cần chia thành nhiều tập tin mã nguồn. Lúc này xuất hiện mấy vấn đề:
                          • Làm thế nào để tự động hóa được việc biên dịch nhiều tập tin mã nguồn, không lẽ gõ bằng tay từng lệnh dịch
                          • Mô tả mối phụ thuộc giữa các tập tin, khi một tập tin chỉnh sửa thì bản thân nó và những tập tin phụ thuộc vào nó sẽ phải biên dịch lại, nhưng không nhất thiết phải biên dịch lại toàn bộ dự án. (Tưởng tượng ở dự án lớn mỗi lần sửa lại phải biên dịch toàn bộ thì sẽ thế nào.)
                          • Thực hiện tự động các công việc khác.


                          Make là tiện ích để giải quyết những vấn đề trên. Nó mô tả sự phụ thuộc giữa các công việc và tự động gọi các công cụ khác để tự động hóa công việc. Make được điều khiển bởi một tập tin đặc biệt gọi là makefile - về bản chất cũng là một tập tin mã nguồn. Và viết tập tin này cũng như là lập trình cho bản thân công việc biên dịch.

                          Có nhiều tiện ích make khác nhau, ngay cả VC++ cũng dùng nmake. Trên nền Linux, công cụ chính thống là GNU make.

                          Tài liệu về make vô thiên lủng, nhưng tốt nhất vẫn là tài liệu gốc tại đây http://www.gnu.org/software/make/manual/ trông có vẻ nhiều, nhưng thực tế chỉ cần đọc cỡ 3 chương đầu là đủ để làm.
                          Last edited by bqviet; 02-11-2007, 18:01. Lý do: sửa chính tả
                          Phần mềm tự do hoặc không dùng máy tính nữa !.

                          Comment


                          • #14
                            Chào anh.

                            Em đọc nhiều bài viết của anh Việt rồi, thấy rất xúc tích và đáng học hỏi. Em xin đóng góp một link khá hay về tạo makefile:

                            Automating Program Compilation - Writing Makefiles

                            trang chủ của nó cũng giới thiệu vài bài viết khá hay về Unix Beginners, Intermediate Level, Advanced Topics, sẽ hiểu được cách dùng gcc, gcc++, ... Em đã đọc và thấy rất thú vị. Mình copy cái content cho mọi người xem:

                            Code:
                              1.  Unix Beginners
                                     1. Compiling C/C++ Programs On Unix   (archive) (~15 lynx pages)
                                     2. Debugging With "gdb"   (archive) (~11 lynx pages)
                                     3. Automating Program Compilation Using Makefiles   (archive) (~13 lynx pages)
                                     4. Manipulating Files And Directories In Unix   (archive) (~50 lynx pages) 
                               2. Intermediate Level
                                     1. Creating And Using C Libraries   (archive) (~18 lynx pages)
                                     2. Unix Signals Programming   (archive) (~29 lynx pages)
                                     3. Internetworking With Unix Sockets   (archive) (~21 + ~44 lynx pages)
                                     4. Accessing User Information On A Unix System   (archive) (~38 lynx pages)
                                     5. Graphics Programming
                                           1. Basic Graphics Programming With The Xlib Library   (archive) (~59 + ~44 lynx pages) 
                               3. Advanced Topics
                                     1. Unix And C/C++ Runtime Memory Management For Programmers   (archive) (~69 lynx pages)
                                     2. Parallel Programming - Basic Theory For The Unwary   (archive) (~29 lynx pages)
                                     3. Multi-Threaded Programming With The Pthreads Library   (archive) (~60 lynx pages)
                                     4. Multi-Process Programming Under Unix   (archive) (~80 lynx pages)
                            Em thấy rằng việc học một IDE mới hơi tốn nhiều thời gian, nếu nó không tốt lại quay sang với cái mới hơn. Rồi sang hệ điều hành khác, hay môi trường khác lại học tiếp,... Vì thế nên em chọn việc gõ lệnh hoặc dùng makefile.

                            Chúc mọi người thành công.
                            Last edited by ngohaibac; 14-10-2008, 18:46.
                            Technical sale at WT Microelectronics S'pore
                            Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
                            Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

                            Comment


                            • #15
                              thấy các anh bàn luận sôi nổi em cũng vào góp vui một tí.

                              nói chung, em thấy là nếu là để code cho linux thì vim và emacs là nhất. Riêng Emacs các bạn có thể custom thành một IDE, có thể viết script để nó hiện từ gợi nhớ, nó có thể là một file browser, là một cái để viết code thì hiển nhiên rồi, có thể tích hợp debugger như GDB khá cool ( ngang với debugger của visual studio theo ý kiến của em ). Vim thì tất cả được làm ở terminal nên những việc này chỉ việt Ctrl-z để suspend nó ra terminal làm hết mọi việc rồi lại fg để bật nó lên.

                              vim và emacs ( GUI thì có gvim và emacs-gtk có cả bản cho windows, hoặc chạy trên cygwin cho windows) có các sử dụng khác hẳn với các gui tools khác. Nó cho viết script để thực hiện những việc lặp đi lặp lại hoặc những cái mà mình hay dùng. Dễ dàng custom chỉ cần có tí kiến thức về lập trình. khi soạn thảo, viết code, biên dịch không cần dùng đến chuột, f1...f12, không cần dùng đến del và insert cũng như muỗi tên trái, mũi tên phải nói chung là tiết kiệm thời gian vì tay chỉ cần để đúng tư thế gõ 10 ngón, không phải di chuyển nhều. Riêng cái nay thì không GUI tools nào có thể địch được. Vim là nhanh nhất nhưng mà phải nhớ lệnh nhiều.

                              Bình thường nhiều người vẫn nghĩ emacs phải cho những người lập trình "pro" nhưng sau một thời gian tìm hiểu em thấy cũng dễ thôi.
                              chỉ cần mất khoảng 2h vừa đọc vừa thực hành cái tutor có sẵn của emacs là đã có thể edit được kha khá rồi, còn cao cấp hơn thì chọn lấy một quyển sách hoặc tutor trên trang của IBM.

                              Với từng mode nó lại có lệnh riêng nên hay dùng mode nào thì vào manual tìm hiểu các lệnh của mode đó thôi. Ví dụ: ở mode soạn thảo latex chuẩn trong emac, dùng Ctrl-c Ctrl-f để biên dịch, Ctrl-c Ctrl-v để view DVI file. nếu cài thêm auctex ( một gói gồm các script viết riêng cho emacs để soạn thoải latex) thì còn cool hơn nó cho preview thẳng trong buffer. Viết code C, C++ rất đẹp, ví dụ bạn gõ một đống lệnh, nhưng mà các lùi dòng chưa được đẹp hoặc code lộn xộn vì chỉnh sửa và comment một số dòng. trong emacs để nó căn lề đúng như một người lập trình chuyên nghiệp thì chỉ việc đánh dấu đoạn muốn lùi dòng cho đúng ấn alt-x và gõ vào indent-region ( dùng tab để select cho nhanh ) là nó sẽ đẹp như style chuẩn

                              emacs có thể soạn thoải nhiều file trong dùng một cửa sổ. hỗ trợ các lệnh để biên dịch thẳng trong emacs, debug trong emacs, biên dịch gặp lỗi thì có thể chạy thẳng đến file chứa lỗi. Ngoài ra emacs còn rất nhiều tính năng hữu ích khác đang chờ chúng ta khám phá.

                              chúc vui.

                              Comment

                              Về tác giả

                              Collapse

                              Kaiser Tìm hiểu thêm về Kaiser

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X