2012-04-20 64 views
3

可能重複:
Inline Assembler for wrapper function doesn’t work for some reason如何檢查我的包裝函數系統調用 - read()是否正確?

我要求寫的包裝功能read , write , close , open & fork。我寫了4個包裝函數read , write , close , open

我的問題是:

  1. 我怎麼能寫fork包裝功能,使用我寫的read , write , close & open 4包裝的功能呢?

  2. 如何檢查我寫的包裝是否正確?下面是的read包裝函數的代碼 - 名爲my_read

ssize_t my_read(int fd, void *buf, size_t count) 
{  
     ssize_t res; 

     __asm__ volatile(
     "int $0x80"  /* make the request to the OS */ 
     : "=a" (res),  /* return result in eax ("a") */ 
      "+b" (fd),  /* pass arg1 in ebx ("b") */ 
      "+c" (buf),  /* pass arg2 in ecx ("c") */ 
      "+d" (count)  /* pass arg3 in edx ("d") */ 
     : "a" (5)   /* passing the system call for read to %eax , with call number 5 */ 
     : "memory", "cc"); 

     /* The operating system will return a negative value on error; 
     * wrappers return -1 on error and set the errno global variable */ 

     if (-125 <= res && res < 0) 
     { 
     errno = -res; 
     res = -1; 
     } 

     return res; 
} 

備註:我不能直接使用open ,close ,read , write & fork命令。

如果需要,我可以附加其他3個包裝的其餘代碼。以上是read的包裝。

問候

羅恩

回答

0

叉應該是系統調用2,所以

__asm__ volatile ("int $0x80" : "=a" (res) : "0" (2)); 

應該工作。請記住,fork返回兩次,其中res是孩子(在父母中)和0(在孩子中)的pid。