예 28-1is 큰 객체 인터페이스가 어떻게를 보여주는 샘플 토토 사이트 순위libpq사용할 수 있습니다. 의 일부 토토 사이트 순위은 주석을 달 수 있지만 독자의 이점. 이 토토 사이트 순위은에서도 찾을 수 있습니다.src/test/examples/testlo.c소스에서 분포.
예 28-1. 큰 물체libpq토토 사이트 순위 프로그램
/*------------------------------------------------------------------ * * testlo.c-- * LIBPQ로 큰 물체를 사용하여 테스트하십시오 * * 저작권 (C) 1994, 캘리포니아 대학교 리전트 * *------------------------------------------------------------------------ */ #include <stdio.h #include "libpq-fe.h" #include "libpq/libpq-fs.h" #define bufsize 1024 /* * importFile * "in_fileName"파일 가져 오기 "loBjoid"로 큰 개체로 데이터베이스로 가져옵니다. * */ OID importfile (pgconn *conn, char *filename) Oid lobjid; int lobj_fd; char buf [bufsize]; int nbytes, TMP; int fd; /* * 읽을 파일을 엽니 다 */ fd = Open (filename, o_rdonly, 0666); if (fd <0) / * 오류 * / fprintf (stderr, "Unix 파일을 열 수 없습니다. %s \ n", filename); /* * 큰 물체를 만듭니다 */ lobjid = lo_creat (conn, inv_read | inv_write); if (lobjid == 0) fprintf (stderr, "큰 객체를 만들 수 없습니다 \ n"); lobj_fd = lo_open (conn, lobjid, inv_write); /* * Unix 파일에서 읽고 반전 파일에 쓰기 */ while ((nbytes = read (fd, buf, bufsize)) 0) tmp = lo_write (conn, lobj_fd, buf, nbytes); if (tmp <nbytes) fprintf (stderr, "큰 객체를 읽는 동안 오류 \ n"); (void) 닫기 (fd); (void) lo_close (conn, lobj_fd); 리턴 로지드; 무효의 Pickout (PGCONN *CONN, OID LOBJID, Int Start, Int Len) int lobj_fd; char *buf; int nbytes; int nread; lobj_fd = lo_open (conn, lobjid, inv_read); if (lobj_fd <0) fprintf (stderr, "큰 물체 %d \ n을 열 수 없습니다", lobjid); lo_lseek (conn, lobj_fd, start, seek_set); buf = malloc (len + 1); nread = 0; while (len -nread 0) nbytes = lo_read (conn, lobj_fd, buf, len -nread); buf [nbytes] = ''; fprintf (stderr, " %s", buf); nread += nbytes; 무료 (buf); fprintf (stderr, "\ n"); lo_close (Conn, lobj_fd); 무효의 덮어 쓰기 (pgconn *conn, oid lobjid, int start, int len) int lobj_fd; char *buf; int nbytes; int nwritten; int i; lobj_fd = lo_open (conn, lobjid, inv_read); if (lobj_fd <0) fprintf (stderr, "큰 물체 %d \ n을 열 수 없습니다", lobjid); lo_lseek (conn, lobj_fd, start, seek_set); buf = malloc (len + 1); for (i = 0; i <len; i ++) buf [i] = 'x'; buf [i] = ''; nwrretten = 0; while (len -nwritten 0) nbytes = lo_write (conn, lobj_fd, buf + nwritten, len -nwritten); nwrretten += nbytes; 무료 (buf); fprintf (stderr, "\ n"); lo_close (Conn, lobj_fd); /* * ExportFile * "out_filename"을 제출하려면 큰 개체 "lobjoid"를 내보내기 * */ 무효의 ExportFile (PGCONN *CONN, OID LOBJID, Char *Filename) int lobj_fd; char buf [bufsize]; int nbytes, TMP; int fd; /* * 반전 "객체"를 만듭니다. */ lobj_fd = lo_open (conn, lobjid, inv_read); if (lobj_fd <0) fprintf (stderr, "큰 물체 %d \ n을 열 수 없습니다", lobjid); /* * 작성할 파일을 엽니 다 */ fd = Open (filename, o_creat | o_wronly, 0666); if (fd <0) / * 오류 * / fprintf (stderr, "unix 파일을 열 수 없음", filename); /* * Unix 파일에서 읽고 반전 파일에 쓰기 */ while ((nbytes = lo_read (conn, lobj_fd, buf, bufsize)) 0) tmp = 쓰기 (fd, buf, nbytes); if (tmp <nbytes) fprintf (stderr, " %s \ n을 쓰는 동안 오류", filename); (void) lo_close (conn, lobj_fd); (void) 닫기 (fd); 반품; 무효의 exit_nicely (pgconn *conn) pqfinish (conn); 출구 (1); int 메인 (Int Argc, char ** argv) char *in_filename, *out_filename; char *데이터베이스; Oid lobjoid; pgconn *conn; pgresult *res; if (argc! = 4) fprintf (stderr, "usage : %s database_name in_filename out_filename \ n", argv [0]); 출구 (1); 데이터베이스 = argv [1]; in_filename = argv [2]; out_filename = argv [3]; /* * 연결을 설정하십시오 */ conn = pqsetdb (null, null, null, null, database); / * 백엔드 연결이 성공적으로 만들어 졌는지 확인하십시오 */ if (pqstatus (conn) == connection_bad) fprintf (stderr, "데이터베이스 '%s'에 대한 연결 실패. \ n", 데이터베이스); fprintf (stderr, "%s", pqerrormessage (conn)); exit_nicely (conn); RES = PQEXEC (Conn, "시작"); PQCLEAR (RES); printf ( "파일 가져 오기 %s \ n", in_filename); /* lobjoid = importFile (conn, in_filename); */ lobjoid = lo_import (conn, in_filename); /* printf ( "큰 객체 d. \ n", lobjoid); printf ( "큰 객체의 1000-2000 바이트를 따기 \ n"); 픽 아웃 (Conn, Lobjoid, 1000, 1000); printf ( "x 's \ n"을 가진 큰 물체의 1000-2000의 초과 쓰기 바이트); 덮어 쓰기 (Conn, Lobjoid, 1000, 1000); */ printf ( "큰 객체를 파일 s \ n으로 내보내는 것", out_filename); /* ExportFile (Conn, lobjoid, out_filename); */ lo_export (conn, lobjoid, out_filename); res = pqexec (conn, "end"); PQCLEAR (RES); pqfinish (conn); 출구 (0);