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

33.5. Chương kèo bóng đá euro ví dụ#

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

Ví dụ 33.1. Các đối tượng lớn vớilibpqChương kèo bóng đá euro ví dụ

/*-----------------------------------------------------------------------------
 *
 * Testlo.c
 * Kiểm tra bằng cách sử dụng các đối tượng lớn với libpq
 *
 * Phần Bản quyền (c) 1996-2024, Nhóm phát triển toàn cầu kèo bóng đá euro
 * Phần Bản quyền (c) 1994, Regents of the University of California
 *
 *
 * Nhận dạng
 * SRC/TEST/Ví dụ/Testlo.C
 *
 *-------------------------------------------------------------------------
 */
#include <stdio.h
#include <stdlib.h

#include <sys/type.h
#include <sys/stat.h
#include <fcntl.h
#include <unistd.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 tĩnh
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");

    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 \"%s \ "", tên tệp);

    đóng (fd);
    lo_close (Conn, lobj_fd);

    trả lại lobjid;

khoảng trống tĩnh
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 %u", 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] = '\ 0';
        fprintf (stderr, " %s", buf);
        NREAD += nbytes;
        if (nbytes <= 0)
            phá vỡ;              /* Không còn dữ liệu nữa? */

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

khoảng trống tĩnh
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_write);
    if (lobj_fd <0)
        fprintf (stderr, "không thể mở đối tượng lớn %u", 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] = '\ 0';

    nwritten = 0;
    while (Len - nwritten 0)

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

            fprintf (stderr, "\ nwrite không thành công! \ n");
            phá vỡ;

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

/*
 * xuất khẩu -
 * Xuất đối tượng lớn "lobjoid" sang tệp "out_filename"
 *
 */
khoảng trống tĩnh
ExportFile (PGConn *Conn, oid lobjid, char *fileName)

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

    /*
     * Mở đối tượng lớn
     */
    lobj_fd = lo_open (Conn, lobjid, inv_read);
    if (lobj_fd <0)
        fprintf (stderr, "không thể mở đối tượng lớn %u", lobjid);

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

    /*
     * Đọc từ tệp đảo ngược và ghi vào tệp UNIX
     */
    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 \ "",
                    tên tệp);

    lo_close (Conn, lobj_fd);
    đóng (fd);

khoảng trống tĩnh
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ử dụng: %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_ok)

        fprintf (stderr, "%s", pqerrormessage (Conn));
        exit_nicely (Conn);

    /* Đặt đường dẫn tìm kiếm luôn an toàn, vì vậy người dùng độc hại không thể kiểm soát. */
    res = pqexec (Conn,
                 "Chọn pg_catalog.set_config ('search_path', '', false)");
    if (pqresultstatus (res)! = pgres_tuples_ok)

        fprintf (stderr, "set thất bại: %s", pqerrormessage (Conn));
        PQCLEAR (RES);
        exit_nicely (Conn);

    PQCLEAR (RES);

    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);
    if (lobjoid == 0)
        fprintf (stderr, "%s \ n", pqerrormessage (Conn));
    khác

        printf ("\ tas đối tượng lớn %u. \ 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); */
        if (lo_export (Conn, lobjoid, out_filename) <0)
            fprintf (stderr, "%s \ n", pqerrormessage (Conn));

    res = pqExec (Conn, "end");
    PQCLEAR (RES);
    Pqfinish (Conn);
    trả lại 0;

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử kèo bóng đá eurongMẫu nàyĐể báo cáo vấn đề tài liệu.