writing a glibc api for a system call

Possible Duplicate:
Need help with glibc source

I understand how to implement our own system calls in linux kernel. I know we can call this with syscall() or with _asm() in ac program.

  • But I want to understand how to write glibc api for this new system call?.

  • How the open() and read() glibc function calls mapping into system call in kernel?.

    char      message[ ] = "Hello!n";
    
    int main( void )
    {
            write( 1, message, 7 );
            exit( 0 );
    }
    
  • When I convert the above program into assembly it is giving

    main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $20, %esp
        movl    $7, 8(%esp)
        movl    $message, 4(%esp)
        movl    $1, (%esp)
        call    write
        movl    $0, (%esp)
        call    exit
        .size   main, .-main
        .ident  "GCC: (Debian 4.3.2-1.1) 4.3.2"
        .section        .note.GNU-stack,"",@progbits
    

    ~

    3, In "call write" I think write is glibc call here ?. what happens after that? how it maps the glibc call to system call?


    See eg this answer and that answer to similar questions. Read also more about syscalls, the linux kernel, an overview of linux syscalls, and the assembly howto

    The write function from glibc is not the true syscall. It is a wrapper (doing the sycall thru eg sysenter machine instruction, perhaps with the VDSO, and setting errno ). You can use strace to understand the system calls done by some program.

    For example, the MUSL libc has this write.c implementation for write . For GNU libc, look at its write.c.

    链接地址: http://www.djcxy.com/p/90874.html

    上一篇: Linux:系统调用改变了吗?

    下一篇: 为系统调用写一个glibc api