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)
よろしく
ロン