Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: Linux programming | Chương trình C đầu tiên của bạn trên Linux

  1. #1
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Mặc định Linux programming | Chương trình C đầu tiên của bạn trên Linux

    Sau khi cài xong gcc.
    Để xem thông tin về bản GCC của bạn gõ lệnh: man gcc

    Nào bắt đầu viết chương trình đầu tiên:

    Gõ lệnh: gedit để mở Editor:

    Sau đó đưa đoạn code sau vào: (Trông đoạn code này quen quen)
    Code:
    #include <stdio.h>
    
    int main()
    {
        printf("Hello, world!\n");
        return 0;
    }
    Lưu lại với file program1.c
    Compiling bằng lệnh: gcc -o program1 program1.c

    Chạy chương trình bằng lệnh: ./program1

    Chương trình số 2:
    Code:
    #include <stdio.h>
    
    int main()
    {
        int n;
        puts("Please enter a number: ");
        scanf("%d", &n);
        printf("The number is %d \n", n);
    }
    Lưu lại với file là program2.c

    Compiling: gcc -o program2 program2.c
    Run: ./program2

    Chúc mọi người học tập tốt!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  2. #2
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    DR có biết lệnh nào tuơng tự với getch() trên Turbo C không ? Mình thử #include <conio.h> thì nó báo lỗi không có file.
    pEnGwINUS.

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    DR có biết lệnh nào tuơng tự với getch() trên Turbo C không ? Mình thử #include <conio.h> thì nó báo lỗi không có file.
    Xem chương trình này, nó sẽ giải đáp được câu hỏi này của bạn:
    Code:
    /* ***************************************************************************
     *
     *          Copyright 1992-2005 by Pete Wilson All Rights Reserved
     *           50 Staples Street : Lowell Massachusetts 01851 : USA
     *        http://www.pwilson.net/   pete at pwilson dot net   +1 978-454-4547
     *
     * This item is free software: you can redistribute it and/or modify it as 
     * long as you preserve this copyright notice. Pete Wilson prepared this item 
     * hoping it might be useful, but it has NO WARRANTY WHATEVER, not even any 
     * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
     *
     *************************************************************************** */
    
    /* ***************************************************************************
     *
     *                          KBHIT.C
     *
     * Based on the work of W. Richard Stevens in "Advanced Programming in
     *   the Unix Environment," Addison-Wesley; and of Floyd Davidson. 
     *
     * Contains these functions:
     *
     *  To set the TTY mode:
     *     tty_set_raw() Unix setup to read a character at a time.
     *     tty_set_cooked() Unix setup to reverse tty_set_raw()
     *
     *  To read keyboard input:
     *     kb_getc()      keyboard get character, NON-BLOCKING. If a char
     *                      has been typed, return it. Else return 0.
     *     kb_getc_w()    kb get char with wait: BLOCKING. Wait for a char
     *                      to be typed and return it.
     *
     *  How to use:
     *     tty_set_raw()  set the TTY mode to read one char at a time.
     *     kb_getc()      read chars one by one.
     *     tty_set_cooked() VERY IMPORTANT: restore cooked mode when done.
     *
     * Revision History:
     *
     *     DATE                  DESCRIPTION
     * -----------    --------------------------------------------
     * 12-jan-2002     new
     * 20-aug-2002     cleanup
     * 24-nov-2003     Fixed kb_getc() so that it really is non blocking(JH)
     * 10-sep-2006     Let kb_getc() work right under certain Unix/Linux flavors
     *
     *************************************************************************** */
    
    #ifdef __cplusplus
      extern "C" {
    #endif
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <termios.h>
    #include <unistd.h>
    #include <errno.h>
    
    #ifndef STDIN_FILENO
      #define STDIN_FILENO 0
    #endif
    
    extern int errno;                 
    
    static struct termios termattr, save_termattr;
    static int ttysavefd = -1;
    static enum 
    { 
      RESET, RAW, CBREAK 
    } ttystate = RESET;
    
    /* ***************************************************************************
     *
     * set_tty_raw(), put the user's TTY in one-character-at-a-time mode.
     * returns 0 on success, -1 on failure.
     *
     *************************************************************************** */
    int
    set_tty_raw(void) 
    {
      int i;
    
      i = tcgetattr (STDIN_FILENO, &termattr);
      if (i < 0) 
      {
        printf("tcgetattr() returned %d for fildes=%d\n",i,STDIN_FILENO); 
        perror ("");
        return -1;
      }
      save_termattr = termattr;
    
      termattr.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
      termattr.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
      termattr.c_cflag &= ~(CSIZE | PARENB);
      termattr.c_cflag |= CS8;
      termattr.c_oflag &= ~(OPOST);
       
      termattr.c_cc[VMIN] = 1;  /* or 0 for some Unices;  see note 1 */
      termattr.c_cc[VTIME] = 0;
    
      i = tcsetattr (STDIN_FILENO, TCSANOW, &termattr);
      if (i < 0) 
      {
        printf("tcsetattr() returned %d for fildes=%d\n",i,STDIN_FILENO); 
        perror("");
        return -1;
      }
       
      ttystate = RAW;
      ttysavefd = STDIN_FILENO;
    
      return 0;
    }
    
    /* ***************************************************************************
     *
     * set_tty_cbreak(), put the user's TTY in cbreak mode.
     * returns 0 on success, -1 on failure.
     *
     *************************************************************************** */
    int 
    set_tty_cbreak() 
    {
      int i;
    
      i = tcgetattr (STDIN_FILENO, &termattr);
      if (i < 0) 
      {
        printf("tcgetattr() returned %d for fildes=%d\n",i,STDIN_FILENO); 
        perror ("");
        return -1;
      }
    
      save_termattr = termattr;
    
      termattr.c_lflag &= ~(ECHO | ICANON);
      termattr.c_cc[VMIN] = 1;
      termattr.c_cc[VTIME] = 0;
          
      i = tcsetattr (STDIN_FILENO, TCSANOW, &termattr);
      if (i < 0) 
      {
        printf("tcsetattr() returned %d for fildes=%d\n",i,STDIN_FILENO); 
        perror ("");
        return -1;
      }
      ttystate = CBREAK;
      ttysavefd = STDIN_FILENO;
    
      return 0;
    }
    
    /* ***************************************************************************
     *
     * set_tty_cooked(), restore normal TTY mode. Very important to call
     *   the function before exiting else the TTY won't be too usable.
     * returns 0 on success, -1 on failure.
     *
     *************************************************************************** */
    int
    set_tty_cooked() 
    {
      int i;
      if (ttystate != CBREAK && ttystate != RAW) 
      {
        return 0;
      }
      i = tcsetattr (STDIN_FILENO, TCSAFLUSH, &save_termattr);
      if (i < 0) 
      {
        return -1;
      }
      ttystate = RESET;
      return 0;
    }
    
    /* ***************************************************************************
     *
     * kb_getc(), if there's a typed character waiting to be read,
     *   return it; else return 0.
     * 10-sep-2006: kb_getc() fails (it hangs on the read() and never returns
     * until a char is typed) under some Unix/Linux versions: ubuntu, suse, and
     * maybe others. To make it work, please uncomment two source lines below.
     *
     *************************************************************************** */
    unsigned char
    kb_getc(void) 
    {
      int i;
      unsigned char ch;
      ssize_t size;
    /*  termattr.c_cc[VMIN] = 0; */ /* uncomment if needed */
      i = tcsetattr (STDIN_FILENO, TCSANOW, &termattr);
      size = read (STDIN_FILENO, &ch, 1);
    /*  termattr.c_cc[VMIN] = 1; */ /* uncomment if needed */
      i = tcsetattr (STDIN_FILENO, TCSANOW, &termattr);
      if (size == 0)
      {
        return 0;
      }
      else
      {
        return ch;
      }
    }
    
    /* ***************************************************************************
     *
     * kb_getc_w(), wait for a character to be typed and return it.
     *
     *************************************************************************** */
    unsigned char
    kb_getc_w(void) 
    {
      unsigned char ch;
      size_t size;
    
      while (1)
      {
    
        usleep(20000);        /* 1/50th second: thanks, Floyd! */
    
        size = read (STDIN_FILENO, &ch, 1);
        if (size > 0)
        {
          break;
        }
      }
      return ch;
    }
    
    
    #define TEST
    #ifdef TEST
    
    void echo(unsigned char ch);
    
    static enum 
    { 
      CH_ONLY, CH_HEX 
    } how_echo = CH_ONLY;
    
    int 
    main(int argc, char * argv[])
    {
      unsigned char ch;
    
      printf("Test Unix single-character input.\n");
    
      set_tty_raw();         /* set up character-at-a-time */
      
      while (1)              /* wait here for a typed char */
      {
        usleep(20000);       /* 1/50th second: thanks, Floyd! */
        ch = kb_getc();      /* char typed by user? */
        if (0x03 == ch)      /* might be control-C */
        {
          set_tty_cooked();  /* control-C, restore normal TTY mode */
          return 1;          /* and get out */
        }
        echo(ch);            /* not control-C, echo it */
      }
    }
    
    void
    echo(unsigned char ch)
    {
      switch (how_echo)
      {
      case CH_HEX:
        printf("%c,0x%x  ",ch,ch);
        break;
      default:
      case CH_ONLY:
        printf("%c", ch);
        break;
      }
    
      fflush(stdout);      /* push it out */
    }
    
    #endif /* test */
    
    
    #ifdef __cplusplus
    }
    #endif
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  4. #4
    Ngày gia nhập
    06 2007
    Bài viết
    3

    ban thu de them dong nay truoc khi bien dich:
    #gcc -o <ten file> -lb conio

  5. #5
    Ngày gia nhập
    05 2007
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi hieubm Xem bài viết
    DR có biết lệnh nào tuơng tự với getch() trên Turbo C không ? Mình thử #include <conio.h> thì nó báo lỗi không có file.
    Theo mình biết thì trong Linux, không có hỗ trợ các hàm liên quan tới dos(dos.h, conio.h hay graph.h...), do đó khi bạn viết chương trình C trong linux, bạn không thể dùng các hàm này.(getch() nằm trong conio.h). Mình thấy chương trình của bạn Dreaminess đưa cũng khá hay, mô phỏng giống lệnh getch() trong Linux. Mình mới đọc thôi, chua chạy thử, để mình chạy thử xem.D:

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    8

    Mặc định Linux programming | Chương trình C đầu tiên của bạn trên Linux

    Trích dẫn Nguyên bản được gửi bởi hieubm Xem bài viết
    DR có biết lệnh nào tuơng tự với getch() trên Turbo C không ? Mình thử #include <conio.h> thì nó báo lỗi không có file.
    Bạn có thể dùng cái này:
    http://www.ibiblio.org/pub/historic-...inux-conio.tgz

    hoặc:
    http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/

  7. #7
    Ngày gia nhập
    09 2008
    Bài viết
    3

    dùng c-free để chạy các code kia cho nhanh

    #include <stdio.h>
    int main()
    {
    int age;
    char name[10];
    printf("Nhap ten cua ban:\n");
    scanf("%s",&name);
    printf("Nhap tuoi cua ban di:\n");
    scanf("%d",&age);
    printf("%s oi ,tuoi cua ban va ten cua ban khong hop nhau, ban suot ngheo kho, hi hi\n",name);
    printf("Chyen nghe di fox %s, hoc lap trinh khong lam cho ban giau nhu ban nghi dau\n",name);
    return 0;
    }
    Đã được chỉnh sửa lần cuối bởi thangbom77 : 24-03-2009 lúc 09:44 PM. Lý do: chinh code

  8. #8
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trích dẫn Nguyên bản được gửi bởi thangbom77 Xem bài viết
    dùng c-free để chạy các code kia cho nhanh
    thế CFree dùng compiler gì, cái đó có run trên linux không? Bạn có đọc từ đầu đến cuối không? đã xem tiêu đề bài viết chưa?
    None!

  9. #9
    Ngày gia nhập
    04 2009
    Bài viết
    13

    Trích dẫn Nguyên bản được gửi bởi cadimodovn Xem bài viết
    Theo mình biết thì trong Linux, không có hỗ trợ các hàm liên quan tới dos(dos.h, conio.h hay graph.h...), do đó khi bạn viết chương trình C trong linux, bạn không thể dùng các hàm này.(getch() nằm trong conio.h). Mình thấy chương trình của bạn Dreaminess đưa cũng khá hay, mô phỏng giống lệnh getch() trong Linux. Mình mới đọc thôi, chua chạy thử, để mình chạy thử xem.D:
    Bạn chưa chạy thử mà đã khen hay là sao . Mà trong chương trình học thì xem ai đã được học vs ai chưa được học linux chứ . Người chưa biết cậu bảo người ta thế có bằng đánh đố người ta àk ... :(

  10. #10
    Ngày gia nhập
    09 2008
    Bài viết
    11

    /tmp/ccHySVHA.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit status
    cho em hỏi cái lỗi này là sao (chương trình hello word)

Các đề tài tương tự

  1. Beginning Linux Programming
    Gửi bởi hieubm trong diễn đàn Công cụ, Tài liệu lập trình trên Linux
    Trả lời: 6
    Bài viết cuối: 11-04-2012, 10:23 AM
  2. Muốn học về Linux để phát triển theo hướng mã nguồn mở trên Linux thì phải làm những gì?
    Gửi bởi vncoder trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 7
    Bài viết cuối: 06-01-2012, 07:58 AM
  3. Linux C++ Programming HOWTO
    Gửi bởi Kevin Hoang trong diễn đàn Công cụ, Tài liệu lập trình trên Linux
    Trả lời: 1
    Bài viết cuối: 04-08-2011, 03:37 PM
  4. Lập trình C trong linux. Cách biên dịch chương trình C trên Linux như thế nào?
    Gửi bởi thangbn trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 5
    Bài viết cuối: 30-05-2009, 11:38 AM
  5. Làm việc với kí tự và chuỗi trong lập trình C trên Linux [Linux Programming]
    Gửi bởi Xcross87 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn
    Trả lời: 4
    Bài viết cuối: 02-10-2007, 11:33 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn