CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

请问ioctlsocket()函数是干什么用的?

楼主fengjibakai(菜鸟)2004-08-03 09:52:28 在 VC/MFC / 网络编程 提问

各位大侠请问一下  
  ioctlsocket()函数是干什么用的?它返回值是什么?共有几个参数?它的各个参数是干什么用的?  
   
  SetForegroundWindow()是干什么用的?它返回值是什么?它的各个参数是干什么用的?  
   
  fflush(0)是干什么用的?它还有别的参数吗?它返回值是什么?它的各个参数是干什么用的?  
   
  atio()是干什么用的?它的参数是什么?它返回值是什么?它的各个参数是干什么用的?  
   
  inet_ntoa()是干什么用的?他的参数是什么?它返回值是什么?它的各个参数是干什么用的?  
   
  ntohs()是干什么用的?他的参数是什么?它返回值是什么?它的各个参数是干什么用的?  
   
  fgets()是干什么用的?他的参数是什么?它返回值是什么?它的各个参数是干什么用的?  
   
  以上各题每回答对一个给10分!(回答特别好的可以多给分)  
   
  问题点数:100、回复次数:9Top

1 楼shusong1228(mugong)回复于 2004-08-03 09:57:26 得分 0

没有Msdn吗?Top

2 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-08-03 12:17:10 得分 0

汗,这个分俺就不赚了,说实在俺也好多不会!!Top

3 楼ffantasyYD(风之子)回复于 2004-08-03 12:20:03 得分 0

对啊,这种问题查msdn撒Top

4 楼wwwhb2000(Good good study, Day day Up!)回复于 2004-08-03 12:20:28 得分 0

ioctlsocket  
  The   Windows   Sockets   ioctlsocket   function   controls   the   I/O   mode   of   a   socket.  
   
  int   ioctlsocket(  
      SOCKET   s,                    
      long   cmd,                    
      u_long   FAR   *argp      
  );  
  Parameters  
  s    
  [in]   Descriptor   identifying   a   socket.    
  cmd    
  [in]   Command   to   perform   on   the   socket   s.    
  argp    
  [in,   out]   Pointer   to   a   parameter   for   cmd.    
  Return   Values  
  Upon   successful   completion,   the   ioctlsocket   returns   zero.   Otherwise,   a   value   of   SOCKET_ERROR   is   returned,   and   a   specific   error   code   can   be   retrieved   by   calling   WSAGetLastError.  
   
  Error   code   Meaning    
  WSANOTINITIALISED   A   successful   WSAStartup   call   must   occur   before   using   this   function.    
  WSAENETDOWN   The   network   subsystem   has   failed.    
  WSAEINPROGRESS   A   blocking   Windows   Sockets   1.1   call   is   in   progress,   or   the   service   provider   is   still   processing   a   callback   function.    
  WSAENOTSOCK   The   descriptor   s   is   not   a   socket.    
  WSAEFAULT   The   argp   parameter   is   not   a   valid   part   of   the   user   address   space.    
   
  Top

5 楼wwwhb2000(Good good study, Day day Up!)回复于 2004-08-03 12:20:57 得分 0

你的MSDN呢?Top

6 楼luo_sen(随便)回复于 2004-08-03 13:05:46 得分 0

自己去查看msdn吧,省几分!  
  Top

7 楼fengjibakai(菜鸟)回复于 2004-08-04 15:20:30 得分 0

小弟的英语很不好而我的MSDN又是英文的我看不懂所以才来问问各位大侠!哪位心肠好的大侠告诉我一下啊!在这里我先谢了!大侠们一定要救救我啊!!!!!!!Top

8 楼kvw3000(回家念经)回复于 2004-08-05 00:09:01 得分 100

//只为分数,好辛苦啊  
   
  1.   ioctlsocket()  
    简述:  
      控制套接口的模式。  
   
      #include   <winsock.h>  
   
      int   PASCAL   FAR   ioctlsocket(   SOCKET   s,   long   cmd,   u_long   FAR*   argp);  
   
      s:一个标识套接口的描述字。  
      cmd:对套接口s的操作命令。  
      argp:指向cmd命令所带参数的指针。  
   
  注释:  
      本函数可用于任一状态的任一套接口。它用于获取与套接口相关的操作参数,而  
  与具体协议或通讯子系统无关。支持下列命令:  
      FIONBIO:允许或禁止套接口s的非阻塞模式。argp指向一个无符号长整型。如  
  允许非阻塞模式则非零,如禁止非阻塞模式则为零。当创建一个套接口时,它就处  
  于阻塞模式(也就是说非阻塞模式被禁止)。这与BSD套接口是一致的。  
  WSAAsynSelect()函数将套接口自动设置为非阻塞模式。如果已对一个套接口进行了  
  WSAAsynSelect()   操作,则任何用ioctlsocket()来把套接口重新设置成阻塞模式的试  
  图将以WSAEINVAL失败。为了把套接口重新设置成阻塞模式,应用程序必须首先  
  用WSAAsynSelect()调用(IEvent参数置为0)来禁至WSAAsynSelect()。  
      FIONREAD:确定套接口s自动读入的数据量。argp指向一个无符号长整型,其  
  中存有ioctlsocket()的返回值。如果s是SOCKET_STREAM类型,则FIONREAD返  
  回在一次recv()中所接收的所有数据量。这通常与套接口中排队的数据总量相同。  
  如果S是SOCK_DGRAM   型,则FIONREAD返回套接口上排队的第一个数据报大  
  小。  
      SIOCATMARK:确实是否所有的带外数据都已被读入。这个命令仅适用于  
  SOCK_STREAM类型的套接口,且该套接口已被设置为可以在线接收带外数据  
  (SO_OOBINLINE)。如无带外数据等待读入,则该操作返回TRUE真。否则的话  
  返回FALSE假,下一个recv()或recvfrom()操作将检索“标记”前一些或所有数据。  
  应用程序可用SIOCATMARK操作来确定是否有数据剩下。如果在“紧急”(带外)  
  数据前有常规数据,则按序接收这些数据(请注意,recv()和recvfrom()操作不会在  
  一次调用中混淆常规数据与带外数据)。argp指向一个BOOL型数,ioctlsocket()在  
  其中存入返回值。  
   
  兼容性:  
      本函数为Berkeley套接口函数ioctl()的一个子集。其中没有与FIOASYNC等价的  
  命令,SIOCATMARK是套接口层次支持的唯一命令。  
   
  返回值:  
      成功后,ioctlsocket()返回0。否则的话,返回SOCKET_ERROR错误,应用程序  
  可通过WSAGetLastError()获取相应错误代码。  
   
   
  错误代码:  
      WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。  
      WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。  
      WSAEINVAL:cmd为非法命令,或者argp所指参数不适用于该cmd命令,或者  
  该命令  
  不适用于此种类型的套接口。  
      WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。  
      WSAENOTSOCK:描述字不是一个套接口。  
   
  参见:  
      socket(),   setsockopt(),   getsockopt(),   WSAAsyncSelect().  
   
  2.   SetForegroundWindow    
  注释:  
  函数将窗口设为系统的前台窗口。这个函数可用于改变用户目前正在操作的应用程序.   键盘输入将被传到该窗口。  
   
  BOOL   SetForegroundWindow(  
      HWND   hWnd       //   handle   to   window  
  );  
   
  参数   hWnd    
  [输入参数]   需要被激活至前台窗口的句柄  
   
  返回值    
  假如该窗口被成功激活至前台,返回非零值,否则返回值为零。  
   
  3.   fflush()  
  简介:  
  刷新一个流  
   
  注释:  
  #include   <stdio.h>    
  int   fflush(FILE   *stream);      
  函数   fflush   强制在所给的输出流或更新流   stream   上,写入在用户空间缓冲的所有数据,使用流的底层写功能函数。流的打开状态不受影响。    
  如果参数   stream   是   NULL,   fflush   刷新   所有   打开的流  
   
  对文件的操作,与对内存的操作相比,通常比较慢。譬如说,如果我要往文件里面写1个字节,写4096次,这速度比往文件里面写4096字节,只写一次,要慢很多。所以一般操作系统/库会把对文件的操作缓存起来,积累到一定程度,再作真正的物理操作。    
  你使用stdout相关函数的时候,因为操作系统/库把stdout也看成一个文件句柄(事实上,它也很可能是一个被重定向的文件),所以你的输出,可能会被操作系统/库暂时保存在内存里,这样可能不是你想要的结果,fflush一下,可以保证这样的缓存被清空。    
   
  返回值:  
  成功执行返回   0,否则返回   EOF   并设置全局变量   errno   来指示错误发生。      
   
  错误代码:  
  EBADF    
  Stream   不是一个打开的流,或者不是用于输出。    
  函数   fflush   也可能失败并置   errno   为   write(2)   指定的值  
   
  例子:  
  int   i;    
  printf("请输入一个数字:");    
  scanf("%d",&i);  
  就有问题。因为,可能你要用户输入的时候,屏幕上什么都没有,那段话可能还在内存里呆着呢。所以要写成:    
  int   i;    
  printf("请输入一个数字:");    
  fflush(stdout);    
  scanf("%d",&i);  
   
  如果你使用STL就不用考虑这样的问题了,STL的input   stream接受输入前会自动把相应的output   stream   flush一下。    
   
  你说的fflush(0)是对标准输出流进行刷新,但是一般不这样使用  
   
  4.   atoi()   //非atio()  
  int   atoi(const   char*   s);  
  这个函数比较简单,用于把字符串s转换成int类型;该函数等价于  
  (int)strtol(s,   (char   **)NULL,   10);  
   
  5.   inet_ntoa()  
  简述:  
      将网络地址转换成“.”点隔的字符串格式。  
   
      #include   <winsock.h>  
   
      char   FAR*   PASCAL   FAR   inet_ntoa(   struct   in_addr   in);  
   
      in:一个表示Internet主机地址的结构。  
   
  注释:  
      本函数将一个用in参数所表示的Internet地址结构转换成以“.”   间隔的诸如  
  “a.b.c.d”的字符串形式。请注意inet_ntoa()返回的字符串存放在WINDOWS套接  
  口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的  
  下一个WINDOWS套接口调用前,数据将保证是有效。  
   
  返回值:  
      若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NVLL。其中的数  
  据应在下一个WINDOWS套接口调用前复制出来。  
   
  参见:  
      inet_addr().  
   
  6.   ntohs()  
  简述:  
      将网络字节顺序转换成主机的无符号短整形数。  
   
      #include   <winsock.h>  
       
      u_short   PASCAL   FAR   ntohs(   u_short   netshort);  
   
      netshort:网络字节顺序短整形数  
   
  注释:  
      本函数将一个16位数从网络字节顺序转换成主机字节顺序。  
   
  返回值:  
      ntohs()返回一个主机字节顺序的值。  
       
   
  7.   fgets()  
  fscanf()、fgets()和fgetc()函数    
          函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数,   其调用格式    
  如下:    
            int   fscanf(FILE   *stream,   char   *format,   <address-list>);    
            char   fgets(char   *string,   int   n,   FILE   *steam);    
            int   fgetc(FILE   *steam);    
          fscanf()函数的用法与scanf()函数相似,       只是它是从文件中读到信息。    
  fscanf()函数的返回值为EOF(即-1),   表明读错误,   否则读数据成功。fgets()函    
  数从文件中读取至多n-1个字符(n用来指定字符数),   并把它们放入string指向的    
  字符串中,   在读入之后自动向字符串未尾加一个空字符,   读成功返回string指针,    
  失败返回一个空指针。fgetc()函数返回文件当前位置的一个字符,     读错误时返    
  回EOF。    
          下面程序读取例11产生的test.dat文件,   并将读出的结果显示在屏幕上。    
          例    
            #include<stdio.h>    
            main()    
            {    
                      char   *s,   m[20];    
                      int   i;    
                      FILE     *fp;    
                      fp=fopen("test.dat",   "r");         /*打开文字文件只读*/    
                      fgets(s,   24,   fp);                           /*从文件中读取23个字符*/    
                      printf("%s",   s);                             /*输出所读的字符串*/    
                      fscanf(fp,   "%d",   &i);                   /*读取整型数*/    
                      printf("%d",   i);                             /*输出所读整型数*/    
                      putchar(fgetc(fp));                       /*读取一个字符同时输出*/    
                      fgets(m,   17,   fp);                           /*读取16个字符*/    
                      puts(m);                                             /*输出所读字符串*/    
                      fclose(fp);                                       /*关闭文件*/    
                      getch();                                             /*等待任一键*/    
            }    
          运行后屏幕显示:    
          Your   score   of   TOEFL   is:   617    
          That's   good   news    
          如果将上例中fscanf(fp,   "%d",   &i)改为fscanf(fp,   "%s",   m),     再将其后    
  的输出语句改为printf("%s",   m),   则可得出同样的结果。由此可见Turbo   C2.   0    
  中只要是读文字文件,   则不论是字符还是数字都将按其ASCII值处理。   另外还要    
  说明的一点就是fscanf()函数读到空白符时,   便自动结束,   在使用时要特别注意。  
  Top

9 楼kvw3000(回家念经)回复于 2004-08-05 12:51:03 得分 0

更正:  
  你说的fflush(0)是对标准输出流进行刷新,但是一般不这样使用  
  //这句有误,#define   NULL   0  
  因此fflush(0)就是fflush(NULL),刷新所有打开的流  
  Top

相关问题

  • getchild()函数是用来干什么的?
  • cshu函数是干什么用的阿?
  • 函数申明int GetWindowTextLength( ) const; 后面的const要干什么用?
  • 在C++中的拷贝构造函数是干什么用的?
  • 请问ASSERT()函数是干什么用的?
  • CAsyncSocket类的Flush()函数是用来干什么的?
  • GetProfileInt这个函数是用来干什么的?
  • 请问函数proc_calc_metrics是干什么用的?
  • 请问函数GetActiveView()主要干什么用的?
  • 续问题“请问函数GetActiveView()主要干什么用的?”

关键词

  • 函数
  • 接口
  • 数据
  • 文件
  • 字符
  • 模式
  • 应用程序
  • 参数
  • 返回
  • ioctlsocket

得分解答快速导航

  • 帖主:fengjibakai
  • kvw3000

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo