lo_open (PGconn)

    /*
     * call-seq:
     *    conn.lo_open( oid, [mode] ) -> Fixnum
     *
     * Open a large object of _oid_. Returns a large object descriptor
     * instance on success. The _mode_ argument specifies the mode for
     * the opened large object,which is either +INV_READ+, or +INV_WRITE+.
     *
     * If _mode_ is omitted, the default is +INV_READ+.
     */
    static VALUE
    pgconn_loopen(int argc, VALUE *argv, VALUE self)
    {
            Oid lo_oid;
            int fd, mode;
            VALUE nmode, selfid;
            PGconn *conn = get_pgconn(self);

            rb_scan_args(argc, argv, "11", &selfid, &nmode);
            lo_oid = NUM2INT(selfid);
            if(NIL_P(nmode))
                    mode = INV_READ;
            else
                    mode = NUM2INT(nmode);

            if((fd = lo_open(conn, lo_oid, mode)) < 0) {
                    rb_raise(rb_ePGError, "can't open large object");
            }
            return INT2FIX(fd);
    }