±Û¾´ÀÌ :ÀÌÁ¾´ë 1998³â 12¿ù 17ÀÏ 18:22:33
¾Æ·¡ºÎ¹®¿¡ ±ÛÀ» À߸ø ¿Ã·Á¼ ´Ù½Ã ¿Ã¸³´Ï´Ù.
¹Ø¿¡ ÀÖ´Â ¼Ò½º´Â 'ÀÚ¹Ù21ÀÏ ¿Ï¼º'À̶ó´Â Ã¥¿¡ ÀÖ´Â °ÍÀ¸·Î
native class ¸¦ Å×½ºÆ®Çϱâ À§ÇØ ¸¸µç °ÍÀÔ´Ï´Ù.
/************************************************************************/
OS : UNIX
Webserver : Netscape Enterprise Server3.0
JDK : Solaris JDK1.1.4
JDK home dir : /idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk
Netscape home dir : /edisk11/netscape/doc
Work dir : /edisk11/netscape/doc
/************************ SimpleFile.java *******************************/
public class SimpleFile{
public static final char separatorChar = '>';
protected String path;
protected int fd;
public SimpleFile(String s){
path = s;
}
public String getFileName(){
int index = path.lastIndexOf(separatorChar);
return(index < 0) ? path : path.substring(index + 1);
}
public String getPath(){
return path;
}
public native boolean open();
public native void close();
public native int read(byte[] buffer, int length);
public native int write(byte[] buffer, int length);
static{
System.loadLibrary("simple");
}
}
/********************* SimpleFileNative.c *******************************/
#include "SimpleFile.h"
#include <sys/param.h>
#include <fcntl.h>
#define LOCAL_PATH_SEPARATOR '/'
static void fixSeparators(char *p){
for(; *p != '\0'; ++p)
if(*p == SimpleFile_separatorChar)
*p = LOCAL_PATH_SEPARATOR;
}
long SimpleFile_open(struct HSimpleFile *this){
int fd;
char buffer[MAXPATHLEN];
javaString2CString(unhand(this)->path, buffer, sizeof(buffer));
fixSeparators(buffer);
if((fd = open(buffer, O_REWR | O_CREAT, 0664)) < 0)
return(FALSE);
unhand(this)->fd = fd;
return(TRUE);
}
void SimpleFile_close(struct HSimpleFile * this){
close(unhand(this)->fd);
unhand(this)->fd = -1;
}
long SimpleFile_read(struct HSimpleFile *this, HArrayOfByte *buffer, long count){
char *data = unhand(buffer)->body;
int length = obj_length(buffer);
int numBytes = (length < count ? length : count);
if((numBytes = read(unhand(this)->fd, data, numBytes)) == 0)
return(-1);
return(numBytes);
}
long SimpleFile_write(struct HSimpleFile *this, HArrayOfByte *buffer, long count){
char *data = unhand(buffer)->body;
int length = obj_length(buffer);
return(write(unhand(this)->fd, data, (length < count ? length : count)));
}
/****************************** ½ÇÇà************************************/
diiis-sun% javac SimpleFile.java
diiis-sun% javah SimpleFile
diiis-sun% javah -stubs SimpleFile
diiis-sun% cc -G -I/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include \
-I/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/solaris \
SimpleFileNative.c SimpleFile.c -o Libsimple.so
SimpleFileNative.c:
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: invalid token: ##
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: undefined or not a type: java_lang_Object
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: warning: "typedef" valid only for function declaratn
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: invalid token: ##
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: undefined symbol: Class
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: syntax error before or at: java_lang_Object
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: cannot recover from previous errors
SimpleFile.c:
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: invalid token: ##
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: undefined or not a type: java_lang_Object
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: warning: "typedef" valid only for function declaratn
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: invalid token: ##
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: undefined symbol: Class
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: syntax error before or at: java_lang_Object
"/idisk1/oracle8/app/oracle/product/8.0.4/ows/4.0/jdk/include/oobj.h", line 56: cannot recover from previous errors
/************************************************************************/
À§¿Í °°ÀÌ ÄÄÆÄÀÏ °á°ú°¡ ³ª¿Ô½À´Ï´Ù.
Á¦°¡ ÄÄÆÄÀÏÀ» À߸øÇÑ°ÍÀÎÁö ¾Æ´Ï¸é JDK ¹öÀüÀÌ ³·¾Æ¼ ±×·±°ÇÁö
ÇÏ¿©Æ° oobj.h ¸¦ °íÄ¥¼öµµ ¾ø°í Çؼ
¿©·¯ºÐÀÇ Ãæ°í¸¦ µè°íÀÚ ÇÕ´Ï´Ù.
À̹øÁÖ±îÁö ¾î¶²½ÄÀ¸·Îµç °á°ú°¡ ³ª¿Í¾ß µÇ´Â ºÎºÐÀÔ´Ï´Ù.
ÀÚ¹Ù ¸Å´Ï¾Æ´ÔµéÀÇ ¸¹Àº Ãæ°í ºÎŹµå¸³´Ï´Ù.
(Ã߽Š: ²ÀÁ» µµ¿ÍÁÖ¼¼¿ä! ±×¸®°í ¹«»çÈ÷ ³¡³ª¸é ¼ÒÁÖ ÇÑÀÜ ÇսôÙ.)