0

Linux の下で read() のラッパー関数を作成しようとしています。

Wrappers を使うのはこれが初めてなので、気楽にやってください :)

コードが与えられたmy_wrappers.cファイル:

#include "my_wrappers.h"
#include <unistd.h>
#include <sys/types.h>

ssize_t my_read (int fd, void *buf, size_t count)
{
  long ret;
  extern int errno;

  __asm__ __volatile__ ("pushl %%ebx\n\t"
                        "movl %%esi,%%ebx\n\t"
                        "int $0x80\n\t"
                        "popl %%ebx"
                      : "=a" (ret)
                      : "0" (SYS_read), "S" ((long) fd),
                        "c" ((long) buf) "d" ((long) count): "bx");
  if (ret >= 0)
  {
    return (int) ret;
  }
  errno = -ret;
  return -1;
}

およびmy_wrappers.hファイル:

#ifndef __MY_WRAPPERS_H_
#define __MY_WRAPPERS_H_

#include <unistd.h>
#include <sys/types.h>


int my_open(const char *pathname, int flags, mode_t mode);
ssize_t my_write(int fd, const void *buf, size_t count);
ssize_t my_read(int fd, void *buf, size_t count);
int my_close(int fd);

pid_t my_fork(void);

#endif

ラッパーの呼び出しのみを使用できますlibc。つまり、open()、read() などを呼び出すことはできません。

このコードの何が問題になっていますか? システムコールテーブルの番号を使っていないからでしょうか?

Eclipse からのエラー: -‘SYS_read’ undeclared (first use in this function)

よろしく

ロン

4

1 に答える 1

3

あなたがする必要がある#include <syscall.h>か、おそらく#include <sys/syscall.h>

于 2012-04-20T04:46:25.160 に答える