免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3851 | 回复: 8
打印 上一主题 下一主题

tpcall()函数的最后一个参数代表什么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-03 09:38 |只看该作者 |倒序浏览
10可用积分
网上说:
=============
int tpcall(char *svc, char *idata, long ilen, char **odata, long *olen, long flags)
描述:客户端同步调用服务端的名为svc的SERVICE,
参数:
char *svc:    SERVICE的名称
char *idata:  输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内
long ilen:     输入缓冲区的长度
char **odata:输出缓冲区的地址,服务端传给客户端的结果放在该缓冲区内
long   *olen:  输出缓冲区的长度   
long flags:    调用标志,由以下几个:
TPNOTRAN
如果调用svc的客户端当前在TRANSACTION方式下,那么svc不参与当前的TRANSACTION。

TPNOCHANGE
如果服务端返回的缓冲区类型与客户端定义的缓冲区(odata)类型不一致,默认情况下,odata会转换成与服务端返回的缓冲区类型一致的类型,如果设置了该FLAG,那么当出现这种情况时,不进行缓冲区类型转换,并且会保错。

TPNOBLOCK
默认情况下,如果客户端有阻塞条件存在(如CLIENT的TCP/IP中的缓冲区满,磁盘I/O忙等),那么客户端会阻塞在那里,直到阻塞消除或超时出错。如果设置了TPNOBLOCK,当客户端有阻塞条件存在时,TPCALL()会立刻返回并报错. 注意TPNOBLOCK只对发送请求时起作用,如果在接收服务端返回的结果时有阻塞条件存在,客户端会在那里等待,直到阻塞消除或超时出错

TPNOTIME
如果客户端有阻塞条件存在,客户端会一直阻塞在那里,即使到了超时时间也不返回,但如果该客户端是在TRANSACTION模式下,当到了事务的超时时间,还是会报超时错误并返回。

TPSIGRSTRT
如果在进行系统调用时,被信号中断,该系统调用会重新进行。

调用成功返回0,失败返回-1, 错误号保存在全局变量tperrno中。
---------------------------
那么我的问题是:
#include <stdio.h>
#include <stdlib.h>
#include "atmi.h"

main(argc, argv)
{
        long reqlen=1024;
        char *reqbuf;
        /* create connection to server side of tuxedo */
        if(tpinit((TPINIT *)NULL)==-1)
        {
                (void)fprintf(stderr, "Tpinit failed!\n");
                exit(1);
        }

        /* allocate buffer of send */
        reqbuf=(char *)tpalloc("STRING", NULL, reqlen);
        if(reqbuf==(char *)NULL)
        {
                printf("tpalloc failed!\n");
                tpterm();
        }
        strcpy(reqbuf, "7844");

        /* call service TEST1 */
        if(tpcall("TEST1", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0)<0)
        {
                printf("tpcall failed, tperrno=%ld, tperrtext=%s\n", tperrno, tpstrerror(tperrno));
                tpfree(reqbuf);
                tpterm();
                exit(1);
        }

        printf("name=%s\n", reqbuf);
        tpfree(reqbuf);
        tpterm();
        return (0);
}
这个程序中的tpcall为什么用0,这里的0代表什么?
------------------------
If *olen is 0 upon return, then the reply has no data portion and neither *odata nor the buffer it points to were modified. It is an error for *odata or olen to be NULL.
---------------------------
没什么话讲了

[ 本帖最后由 simhare 于 2009-7-8 15:16 编辑 ]

最佳答案

查看完整内容

响应时间0表示无限制

论坛徽章:
0
2 [报告]
发表于 2009-07-03 09:38 |只看该作者

回复 #1 simhare 的帖子

响应时间
0表示无限制

论坛徽章:
0
3 [报告]
发表于 2009-07-03 10:24 |只看该作者

回复 #2 ziggler 的帖子

那不就相当于
-------------
TPNOTIME
如果客户端有阻塞条件存在,客户端会一直阻塞在那里,即使到了超时时间也不返回,但如果该客户端是在TRANSACTION模式下,当到了事务的超时时间,还是会报超时错误并返回。
---------------
的这个TPNOTIME?

论坛徽章:
0
4 [报告]
发表于 2009-07-03 10:26 |只看该作者

回复 #2 ziggler 的帖子

TPNOTIME和0有什么区别么?

论坛徽章:
0
5 [报告]
发表于 2009-07-03 10:28 |只看该作者

回复 #2 ziggler 的帖子

TPNOTIME和0有什么区别么?

论坛徽章:
0
6 [报告]
发表于 2009-07-03 10:32 |只看该作者

回复 #2 ziggler 的帖子

呵呵,我觉得您好像是我见过知识面最广的一个?
--
pro*c你了解,Tuxedo你也了解,Oracle你还了解。
--
请问您是?
呵呵,佩服你,了解这么多,还肯热心帮助别人,难得!!

论坛徽章:
0
7 [报告]
发表于 2009-07-03 10:33 |只看该作者
呵呵,回到正题,
有没有其他路过的朋友知道
TPNOTIME和0有什么区别么?

论坛徽章:
0
8 [报告]
发表于 2009-07-03 13:01 |只看该作者

回复 #1 simhare 的帖子

沉下去了,谁知道:
-------------
Tuxedo的tpcall ()函数的最后一个参数
TPNOTIME和0有什么区别?

论坛徽章:
0
9 [报告]
发表于 2009-07-03 13:47 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP