기타 API

1. wbSaveFile

wbSaveFile은 파일의 Upload를 위한 함수이다.

클라이언트가 서버에 파일을 전송 하기 위해 사용하는 함수로 이 함수는 wbPutFile()와 마찬가지로 웹에서 자료를 공유하고자 할 때 필요하다. wbSaveFile()은 클라이언트의 파일을 서버의 Physical Path를 지정하여 이곳으로 클라이언트가 전송하게 된다.

  • 프로토타입

    #include <wbapi.h>
    #include <atmi.h>
    int wbSaveFile(WBSVCINFO *rqst, char *key, char *path)
  • 반환값

    함수가 정상적으로 수행될 경우 wbSaveFile()은 1을 반환한다. 에러가 발생하는 경우는 –1을 반환한다.

  • 예제

    <savefile.m>

    *DOMAIN
    webtob1
    
    *NODE
     tmaxh1         WEBTOBDIR="/user2/haninho/webtob",
                    SHMKEY = 54777,
                    DOCROOT="/user2/haninho/webtob/docs",
                    APPDIR="/user2/haninho/webtob/ap",
                    PORT = “7654”
    
    *SVRGROUP
     htmlg          NODENAME = "tmaxh1", SvrType = HTML
     webapg         NODENAME = "tmaxh1", SVRTYPE = WEBSTD
    
    *SERVER
     html           SVGNAME = htmlg, MinProc = 1, MaxProc =2
     savefile       SVGNAME = webapg, MinProc = 1, MaxProc = 2, 
    
    *SERVICE
     test           SVRNAME = savefile
    
    *URI
     wbapi          Uri = "/svct/", Svrtype = WEBSTD
    
    *EXT
     htm            MimeType = "text/html", SvrType = HTML
    1. 환경파일 (Config-file)을 컴파일한다.

      $ wscfl –I savefile.m
    2. 서비스 테이블을 생성한다.

      $ wsgst
    3. Source파일을 생성한다.

      다음은 요청을 보내는 html 파일의 예제이다.

      <savefile.html>

      <HTML>
      <TITLE> wbSaveFile() Test </TITLE>
      <BODY>
      <H2> wbSaveFile TEST </H2>
      <FORM METHOD=post ACTION="/svct/test" enctype='multipart/form-data'>
      <B>FILE UPLOAD</B>
      <TABLE WIDTH=650 BGCOLOR=#DDDDDD>
      <TR>
      <TD><SMALL><B>file</B></SMALL></TD>
      <TD><INPUT TYPE=file NAME=upfile SIZE=35></TD>
      </TR>
      <TR>
      <TD><INPUT TYPE=submit VALUE="upload"></TD>
      </TR></TABLE>
      </FORM>
      </BODY>
      </HTML>

      다음은 요청을 처리하는 WBAPI 프로그램 예제이다.

      <savefile.c>

       #include        <stdio.h>
       #include        <usrinc/atmi.h>
       #include        <usrinc/wbapi.h>
       test(WBSVCINFO *rqst) {
       char *temp, *filedata, *filename, path[255];
       long filelen;
       int k, count, rtn;
       FILE *fp;
       count = wbGetDataCount(rqst);
       fprintf(stdout,"datacount=%d\n\n",count);
       for(k=1; k<=count; k++) {
       temp = wbGetNthKey(rqst, k);
       fprintf(stdout,"key=%s\n",temp);
       filedata=wbGetData(rqst, temp);
       if (filedata != NULL)
       fprintf(stdout,"data=%s\n",filedata);
       if((filename=wbGetFileName(rqst, temp)) != NULL) {
       fprintf(stdout,"key=%s\n",temp);
       fprintf(stdout,"filename=%s\n",filename);
       filelen = wbGetFileLen(rqst, temp);
       fprintf(stdout,"filelength=%ld\n",filelen);
       sprintf(path, "/user2/haninho/webtob/sample/data/%s", filename);
       unlink(path);
       rtn = wbSaveFile(rqst, temp, path);
       fprintf(stdout,"rtn=%d\n\n",rtn);
       if( rtn < 0 ) wbPrint(rqst, "File(%s) Upload failed!!\n", filename);
       else wbPrint(rqst, "File(%s) Upload Success!!<br>\n", filename);
       }
       else {
       filedata=wbGetData(rqst, temp);
       fprintf(stdout,"key=%s\n",temp);
       fprintf(stdout,"data=%s\n\n",filedata);
       wbPrint(rqst, "Key = %s, Data = %s <br>\n\n",temp ,filedata);
       }
       }
       wbReturn(rqst,WBSUCCESS);
       }
    4. WBAPI로 만들어진 c파일을, Makefile 파일을 이용하여 컴파일한다.

      $compile c savefile
    5. 다음은 결과가 출력된 화면으로 서비스를 요청하는 html 이다.

      image

      브라우저로 WBAPI 서비스를 요청하면 다음과 같은 결과가 나온다.

      image

2. wbGetErrno

wbGetErrno는 WBAPI 서비스의 에러 번호를 반환한다.

wbGetErrno()는 WebtoB 사용자가 에러 상황을 정확하게 알 수 있도록 해주는 함수로 “atmi.h” 헤더파일에 설정된 에러 상황을 알려준다.

  • 프로토타입

    #include <wbapi.h>
    #include <atmi.h>
    int wbGetErrno()
  • 반환값

    함수가 정상적으로 수행될 경우 에러 번호를 반환한다.

  • 예제

    <geterrno.m>

    *DOMAIN
    webtob1
    
    *NODE
     tmaxh1         WEBTOBDIR="/user2/haninho/webtob",
                    SHMKEY = 54777,
                    DOCROOT="/user2/haninho/webtob/docs",
                    APPDIR = "/user2/haninho/webtob/ap",
                    PORT = "7654"
    
    *SVRGROUP
     htmlg          NODENAME = "tmaxh1", SvrType = HTML
     webapg         NODENAME = "tmaxh1", SvrType = WEBSTD
    
    *SERVER
     html           SVGNAME = htmlg, MinProc = 1, MaxProc = 2
     geterrno       SVGNAME = webapg, MinProc = 1, MaxProc = 2
    
    *SERVICE
     test           SVrname= geterror
    
    *URI
     uri1           uri = "/svct/", SvrType = WEBSTD
    
    *EXT
     htm            MimeType = "text/html", SvrType = HTML
    1. 환경파일 (Config-file)을 컴파일한다.

      $ wscfl –i geterrno.m
    2. 서비스 테이블을 생성한다.

      $ wsgst
    3. 소스 파일을 생성한다. 다음은 요청을 처리하는 WBAPI 프로그램 예제로 파일명은 geterrno.c이다.

       #include        <stdio.h>
       #include        <usrinc/atmi.h>
       #include        <usrinc/wbapi.h>
       test(WBSVCINFO *rqst) {
       int result;
              int rnt;
              int date;
              wbPrint(rqst, "<HTML>\n");
              wbPrint(rqst, "<BODY>\n");
              result = wbGetErrno();
              wbPrint(rqst, "wbGetErrno() : %d<br>\n",result);
              date = wbGetDateHdr(rqst, "Modified-Since");
              if(date == -1) {
                      result = wbGetErrno();
                      wbPrint(rqst, "wbGetDateHdr() is failed<br>\n");
                      wbPrint(rqst, "wbGetErrno() : %d<br>\n", result);
              }
              wbPrint(rqst, "</HTML></BODY>");
              wbReturn(rqst, WBSUCCESS);
       }
    4. WBAPI로 만들어진 c파일을, Makefile 파일을 이용하여 컴파일한다.

      $ compile pc geterrno
    5. 다음은 결과가 출력된 화면이다.

      브라우저로 WBAPI 서비스를 요청하면 다음과 같은 결과가 나온다.

      image