connectnamedpipe 什么是Named Pipes
尊敬的读者,connectnamedpipe和什么是Named Pipes是当前备受关注的话题,但许多人对其仍存在疑惑。在本篇文章中,我将为你提供清晰的解释和深入的分析,希望能满足你的求知欲望。
mysql_real_connect的函数说明
mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。
参数的指定方式如下:
第1个参数应是已有MYSQL结构的地址。调用mysql_real_connect()之前,必须调用mysql_init()来初始化MYSQL结构。通过mysql_options()调用,可更改多种连接选项。
“host”的值必须是主机名或IP地址。如果“host”是NULL或字符串localhost,连接将被视为与本地主机的连接。如果操作系统支持套接字(Unix)或命名管道(Windows),将使用它们而不是TCP/IP连接到服务器。
“user”参数包含用户的MySQL登录ID。如果“user”是NULL或空字符串,用户将被视为当前用户。在UNIX环境下,它是当前的登录名。在Windows ODBC下,必须明确指定当前用户名。
“passwd”参数包含用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。这样,数据库管理员就能按特定的方式设置MySQL权限系统,根据用户是否拥有指定的密码,用户将获得不同的权限。调用mysql_real_connect()之前,不要尝试加密密码,密码加密将由客户端API自动处理。
“db”是数据库名称。如果db为NULL,连接会将默认的数据库设为该值。
如果“port”不是0,其值将用作TCP/IP连接的端口号。注意,“host”参数决定了连接的类型。
如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。
client_flag的值通常为0,但是,也能将其设置为下述标志的组合,以允许特定功能:标志名称标志描述 CLIENT_COMPRESS使用压缩协议。 CLIENT_FOUND_ROWS返回发现的行数(匹配的),而不是受影响的行数。 CLIENT_IGNORE_SPACE允许在函数名后使用空格。使所有的函数名成为保留字。 CLIENT_INTERACTIVE关闭连接之前,允许interactive_timeout秒的不活动时间。 CLIENT_LOCAL_FILES允许LOAD DATA LOCAL处理功能。 CLIENT_MULTI_STATEMENTS通知服务器,客户端可能在单个字符串内发送多条语句。 CLIENT_MULTI_RESULTS通知服务器,客户端能够处理来自多语句执行。 CLIENT_NO_SCHEMA禁止db_name.tbl_name.col_name语法。 CLIENT_ODBC客户端是ODBC客户端。它将mysqld变得更为ODBC友好。 CLIENT_SSL使用SSL,该选项不应由应用程序设置,而是在客户端库内部设置。对于某些参数,能够从选项文件获得取值,而不是取得mysql_real_connect()调用中的确切值。为此,在调用mysql_real_connect()之前,应与MYSQL_READ_DEFAULT_FILE或MYSQL_READ_DEFAULT_GROUP选项一起调用mysql_options()。随后,在mysql_real_connect()调用中,为准备从选项文件读取值的每个参数指定“无值”值:
对于host,指定NULL值或空字符串()。
对于user,指定NULL值或空字符串。
对于passwd,指定NULL值。(对于密码,mysql_real_connect()调用中的空字符串的值不能被选项文件中的字符串覆盖,这是因为,空字符串明确指明MySQL账户必须有空密码)。
对于db,指定NULL值或空字符串
对于port,指定“0”值。
对于unix_socket,指定NULL值。
对于某一参数,如果在选项文件中未发现值,将使用它的默认值,如本节前面介绍的那样。 CR_CONN_HOST_ERROR
无法连接到MySQL服务器。
CR_CONNECTION_ERROR
无法连接到本地MySQL服务器。
CR_IPSOCK_ERROR
无法创建IP套接字。
CR_OUT_OF_MEMORY
内存溢出。
CR_SOCKET_CREATE_ERROR
无法创建Unix套接字。
CR_UNKNOWN_HOST
无法找到主机名的IP地址。
CR_VERSION_ERROR
协议不匹配,起因于:试图连接到具有特定客户端库(该客户端库使用了不同的协议版本)的服务器。如果使用很早的客户端库来建立与较新的服务器(未使用“--old-protocol”选项开始的)的连接,就会出现该情况。
CR_NAMEDPIPEOPEN_ERROR
无法在Windows平台下创建命名管道。
CR_NAMEDPIPEWAIT_ERROR
在Windows平台下等待命名管道失败。
CR_NAMEDPIPESETSTATE_ERROR
在Windows平台下获取管道处理程序失败。
CR_SERVER_LOST
如果connect_timeout> 0,而且在连接服务器时所用时间长于connect_timeout秒,或在执行init-command时服务器消失。
什么是Named Pipes
什么是Named Pipes
Named Pipe(命名管道)是一种有名字的,建立在pipe server和一个(或多个)pipe client之间的单向或双向的通信管道.一个命名管道的所有实例都会共享一个相同的pipe name,但是每个实例都有他自己的缓冲区和句柄(handle),并且为客户端/服务器的通讯提供一个单独的导管.这种对实例的使用使得多个pipe client同时地使用相同的named pipe成为可能.
任何进程都可以访问命名管道,都可以接受安全检查,这使得命名管道成为关联进程和非关联进程之间通信的一种简单方式.
任何进程都可以既做server,又做client,这使得点对点的对等通信成为可能.正如这里用到的那样,术语"pipe server”指的是创建named pipe的进程,术语"pipe client"指的是连接到一个named pipe实例的进程.供服务器端实例化一个命名管道的函数叫做CreateNamedPipe.服务器端接受一个连接请求的函数叫做ConnectNamedPipe.客户端是通过CreateFile或 CallNamedPipe函数来连接到命名管道的.
命名管道可以被用来在同一台机器的不同进程间提供通信,或者在不同机器间通过网络为提供进程间通信.如果一个服务器处于运行状态,所有命名管道都可以是可以通过远程连接的.如果你仅想要在本地使用named pipe,你可以拒绝NT AUTHORITY\NETWORK帐号的访问,或者去使用本地的local RPC.
Named Pipe是Server Message Block(SMB)套件的一个网络协议,基于Inter-process communication(IPC)共享.使用SMB的IPC可以无缝的,透明的转送用户的认证信息给命名管道.即,安全检查对于named pipe是完全可以的.
waitnamedpipe 为什么返回参数不正确
这个函数的使用大家可能也有很多的疑问。如孙鑫的书中有提到说这一个函数应该以Waitxx开始更符合其功能。它就是等待一个客户端的连接,若是阻塞模式则
会等待到真正的在另外一端(客户端)用CreateFile或者是CallNamePipe来创建连接才返回。不过通过实验发现,这个函数管道并不是要用这一个函数来等待,客户端
才能与之进行连接。可以试验一下创建一个字节模式的管道后,不调用它,先把主线程暂停一下。在客户端直接用CreateFile来连接它,发现可以直接连接它,且可以往里面
写数据。此时再用ConnectNamedPipe函数时会发现错误,若仔细查阅其错误代码会发现为ERROR_PIPE_CONNECTED。说明为管道的另一端有进程,也就是说连接已经
建立起来了。所以这个函数的使用也比较的诡异。这个也是要注意的地方
一般用法为CreateNamedPipe来创建管道后调用ConnectNamedPipe来等待别人的连接。(而别人是用CreateFile来建立连接的)
感谢您花时间阅读本文!我们希望通过对connectnamedpipe和什么是Named Pipes的问题进行探讨,为您提供了一些有用的见解和解决方案。如果您需要更多帮助或者有其他疑问,请不要犹豫与我们联系。