Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4
Tài liệu này dành cho phiên bản không được hỗ trợ của kèo bóng đá hom nay.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

28.5. kèo bóng đá hom nay ví dụ

Ví dụ 28-1là a kèo bóng đá hom nay mẫu cho thấy giao diện đối tượng lớn tronglibpqcó thể được sử dụng. Các phần của kèo bóng đá hom nay được nhận xét nhưng còn lại trong nguồn cho lợi ích của người đọc. kèo bóng đá hom nay này cũng có thể được tìm thấy trongsrc/test/exre/testlo.cTrong nguồn phân bổ.

Ví dụ 28-1. Các đối tượng lớn vớilibpqkèo bóng đá hom nay ví dụ

/*--------------------------------------------------------------------------
 *
 * testlo.c--
 * Kiểm tra bằng cách sử kèo bóng đá hom nayng các đối tượng lớn với libpq
 *
 * Bản quyền (c) 1994, Regents của Đại học California
 *
 *----------------------------------------------------------------------
 */
#include <stdio.h
#include "libpq-fe.h"
#include "libpq/libpq-fs.h"

#Define Bufsize 1024

/*
 * Nhập khẩu
 * Nhập tệp "in_filename" vào cơ sở dữ liệu dưới dạng đối tượng lớn "lobjoid"
 *
 */
Oid
Nhập khẩuFile (PGConn *Conn, Char *FileName)

    Oid lobjid;
    int lobj_fd;
    char buf [bufsize];
    int nbytes,
                TMP;
    int fd;

    /*
     * Mở tệp để đọc trong
     */
    fd = open (tên tệp, o_rdonly, 0666);
    if (fd <0)
                               /* lỗi */
        fprintf (stderr, "không thể mở tệp unix %s \ n", tên tệp);

    /*
     * Tạo đối tượng lớn
     */
    lobjid = lo_creat (Conn, inv_read | inv_write);
    if (lobjid == 0)
        fprintf (stderr, "không thể tạo đối tượng lớn \ n");

    lobj_fd = lo_open (Conn, lobjid, inv_write);

    /*
     * Đọc từ tệp Unix và ghi vào tệp đảo ngược
     */
    while ((nbytes = read (fd, buf, bufsize)) 0)

        tmp = lo_write (Conn, lobj_fd, buf, nbytes);
        if (tmp <nbytes)
            fprintf (stderr, "lỗi trong khi đọc đối tượng lớn \ n");

    (void) đóng (FD);
    (void) lo_close (Conn, lobj_fd);

    trả lại lobjid;

Vô hiệu
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, "không thể mở đối tượng lớn %d \ n",
                lobjid);

    lo_lseek (Conn, lobj_fd, bắt đầu, 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;

    miễn phí (BUF);
    fprintf (stderr, "\ n");
    lo_close (Conn, lobj_fd);

Vô hiệu
Ghi đè (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, "không thể mở đối tượng lớn %d \ n",
                lobjid);

    lo_lseek (Conn, lobj_fd, bắt đầu, seek_set);
    buf = malloc (len + 1);

    for (i = 0; i <len; i ++)
        buf [i] = 'x';
    buf [i] = '';

    nwritten = 0;
    while (Len - nwritten 0)

        nbytes = lo_write (Conn, lobj_fd, buf + nwritten, len - nwritten);
        nwritten += nbytes;

    miễn phí (BUF);
    fprintf (stderr, "\ n");
    lo_close (Conn, lobj_fd);

/*
 * Xuất
 *
 */
Vô hiệu
ExportFile (PGConn *Conn, oid lobjid, char *fileName)

    int lobj_fd;
    char buf [bufsize];
    int nbytes,
                TMP;
    int fd;

    /*
     * Tạo một "đối tượng" đảo ngược
     */
    lobj_fd = lo_open (Conn, lobjid, inv_read);
    if (lobj_fd <0)

        fprintf (stderr, "không thể mở đối tượng lớn %d \ n",
                lobjid);

    /*
     * Mở tệp để được ghi vào
     */
    fd = open (tên tệp, o_creat | o_wronly, 0666);
    if (fd <0)
                               /* lỗi */
        fprintf (stderr, "không thể mở tệp unix %s \ n",
                tên tệp);

    /*
     * Đọc từ tệp Unix và ghi vào tệp đảo ngược
     */
    while ((nbytes = lo_read (Conn, lobj_fd, buf, bufsize)) 0)

        TMP = Viết (FD, BUF, NBYTES);
        if (tmp <nbytes)

            fprintf (stderr, "lỗi trong khi viết %s \ n",
                    tên tệp);

    (void) lo_close (Conn, lobj_fd);
    (void) đóng (FD);

    trở lại;

Vô hiệu
exit_nicely (pgconn *Conn)

    Pqfinish (Conn);
    Thoát (1);

int
Main (int argc, char ** argv)

    char *in_filename,
               *out_filename;
    cơ sở dữ liệu char *;
    Oid lobjoid;
    Pgconn *Conn;
    Pgresult *res;

    if (argc! = 4)

        fprintf (stderr, "sử kèo bóng đá hom nayng: %s database_name in_filename out_filename \ n",
                Argv [0]);
        Thoát (1);

    cơ sở dữ liệu = argv [1];
    in_filename = argv [2];
    out_filename = argv [3];

    /*
     * Thiết lập kết nối
     */
    Conn = pqsetDB (null, null, null, null, cơ sở dữ liệu);

    / * Kiểm tra xem kết nối phụ trợ đã được thực hiện thành công */
    if (pqstatus (Conn) == Connection_bad)

        fprintf (stderr, "kết nối với cơ sở dữ liệu '%s' không thành công. \ n", cơ sở dữ liệu);
        fprintf (stderr, "%s", pqerrormessage (Conn));
        exit_nicely (Conn);

    res = pqExec (Conn, "bắt đầu");
    PQCLEAR (RES);

    printf ("Nhập tệp %s \ n", in_filename);
/* lobjoid = Nhập khẩu (Conn, in_filename); */
    lobjoid = lo_import (Conn, in_filename);
/*
    printf ("như đối tượng lớn %d. \ n", lobjoid);

    printf ("chọn ra byte 1000-2000 của đối tượng lớn \ n");
    Pickout (Conn, lobjoid, 1000, 1000);

    printf ("ghi đè byte 1000-2000 của đối tượng lớn với x của \ n");
    Ghi đè (Conn, lobjoid, 1000, 1000);
*/

    printf ("xuất đối tượng lớn sang tệp %s \ n", out_filename);
/* exportFile (Conn, lobjoid, out_filename); */
    lo_export (Conn, lobjoid, out_filename);

    res = pqExec (Conn, "end");
    PQCLEAR (RES);
    Pqfinish (Conn);
    Thoát (0);