Từ 1 tới 1 trên tổng số 1 kết quả

Đề tài: Xài system call trong Linux hay BSD

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    84

    Mặc định Xài system call trong Linux hay BSD

    Bài này đơn giản giới thiệu system call của Linux hoặc BSD.
    System call khá quan trọng trong thế giới Unix vì giúp cho bạn access tài nguyên hệ thống.
    Bạn có thể xài system call qua libc cụ thể là qua header /usr/include/unistd.h
    Tuy nhiên bài này giới thiệu bạn xài system call qua inline assembly.
    __Định nghĩa system call: system call là một tập hàm giúp bạn giao tiếp trực tiếp với nhân hệ điều hành, yêu cầu hệ thống cung cấp cho bạn những tính năng cơ bản. Ví dụ như mở tập tin, ghi đọc file, kết nối mạng với socket, truy suất thư mục, khởi chạy một chuơng trình khác.
    __Một số system call: open read write close lseek exit fork link waitpid creat getdents(xem thư mục có gì)...., có thể xem qua tại /usr/include/asm/unistd.h
    __Ví dụ cách xài system call write qua chuơng trình hello world
    C Code:
    1. #include <string.h>
    2. #include <asm/unistd.h>
    3. #ifdef i386
    4. #error "this program for 64 bit only"
    5. #endif
    6. #define STDOUT 1
    7. int write(int fd,void *buf,int lenght){
    8.   asm volatile("syscall;"::(a)__NR_write);
    9. }
    10. int main(int argc,char **argv){
    11.   char *string="Hello world!";
    12.   write(STDOUT,string,strlen(string));
    13.   asm volatile("xor %rdi,%rdi;mov $60,%rax;syscall;");
    14. }
    Ví dụ chạy lệnh ls bằng syscall
    C Code:
    1. #include <asm/unistd.h>
    2. int execve(const char *name,char **argv,char **env){
    3.   asm volatile("syscall"::(a)__NR_execve);
    4. }
    5. int main(){
    6.   int pid;
    7.   pid =fork();
    8.   if(pid=0) execve("/bin/ls",NULL,NULL);
    9.   asm volatile("xor %rdi,%rdi;syscall;"::(a)__NR_exit); // gọi syscall exit
    10. }
    Đã được chỉnh sửa lần cuối bởi hardwire : 11-11-2011 lúc 04:43 PM.
    RISC better than CISC
    phamthechung0@gmail.com

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

  1. Building Embedded Linux System
    Gửi bởi AlexF trong diễn đàn Thủ thuật, Tutorials và Mã nguồn
    Trả lời: 5
    Bài viết cuối: 25-04-2013, 08:50 PM
  2. Phân biệt System.out.print, System.out.println...trong Java
    Gửi bởi thaihoai trong diễn đàn Nhập môn lập trình Java
    Trả lời: 1
    Bài viết cuối: 10-09-2012, 09:41 PM
  3. Database tìm ngày trong database lỗi: Cannot perform 'Like' operation on System.DateTime and System.String
    Gửi bởi vudat0987 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 26-06-2012, 02:16 PM
  4. Cách System Trace trong Linux ?
    Gửi bởi haian trong diễn đàn Thắc mắc lập trình shell Linux
    Trả lời: 1
    Bài viết cuối: 04-03-2011, 06:53 PM
  5. LINUX System Call Quick Reference
    Gửi bởi Tab trong diễn đàn Công cụ, Tài liệu lập trình trên Linux
    Trả lời: 5
    Bài viết cuối: 12-06-2010, 11:58 AM

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