Linux Socket write() 的错误文件描述符 错误的文件描述符 C

2024-04-10

我对 write(2) 函数有一个有趣的问题。 PrepareResponseForSetCoordinates 函数会导致写入时出现错误的文件描述符错误。

这是错误行: perror("写入套接字时出错"); 总产量: 写入套接字时出错:文件描述符错误

我确信我已经建立了连接,因为PrepareResponseForConnectionTest 的作用就像一个魅力。

您能知道错误的原因吗?

当我使用 gcc 作为编译器时没有问题。之后,由于使用多个新的 cpp 源,我使用 g++ 作为编译器,并且出现此错误。

Regards

下面是我的代码:

#define MAX_PMS_MESSAGE_LEN (4096)
unsigned char baCommBuffer[MAX_PMS_MESSAGE_LEN];
unsigned char PrepareResponseForSetCoordinates(void)
{
    unsigned char baTempBuff[255]={0};
    unsigned short bCnt=0,i=0,bCsum=0,bCnt2=0;
time_t lEpochTime;
time_t lSessionTime;

memset(baTempBuff,0,sizeof(baTempBuff));
memset(baCommBuffer,0,sizeof(baCommBuffer));
bzero(baCommBuffer,MAX_PMS_MESSAGE_LEN);
bzero(baTempBuff,sizeof(baTempBuff));


lEpochTime = time(NULL);
baCommBuffer[bCnt++]    =   START_CHAR;
baCommBuffer[bCnt++]    =   START_CHAR;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
sprintf((char*)baTempBuff,"%ld",(unsigned long)lEpochTime);
memcpy(baCommBuffer+bCnt,baTempBuff,10);

bzero(baTempBuff,sizeof(baTempBuff));
bCnt+=10;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
//  lSessionTime = time(NULL);
if(SPMSMessage.lSessionID)
lSessionTime = SPMSMessage.lSessionID; 
else
lSessionTime=lEpochTime;
sprintf((char*)baTempBuff,"%ld",(unsigned long)lSessionTime);
memcpy(baCommBuffer+bCnt,baTempBuff,10);
bzero(baTempBuff,sizeof(baTempBuff));
bCnt+=10;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   PMC_ID;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   PMS_ID;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   'R';
baCommBuffer[bCnt++]    =   'E';
baCommBuffer[bCnt++]    =   'P';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   'C';
baCommBuffer[bCnt++]    =   'O';
baCommBuffer[bCnt++]    =   'O';
baCommBuffer[bCnt++]    =   'S';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
if(SPMSMessage.bParam== SET_COOR_CAM1_PARAM)
{
baCommBuffer[bCnt++]    =   '2';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   'O';
baCommBuffer[bCnt++]    =   'N';
baCommBuffer[bCnt++]    =   'E';
baCommBuffer[bCnt++]    =   PARAMETER_SEPERATOR;
baCommBuffer[bCnt++]    =   'A';
baCommBuffer[bCnt++]    =   'C';
baCommBuffer[bCnt++]    =   'K';
}
else if(SPMSMessage.bParam== SET_COOR_CAM2_PARAM)
{
baCommBuffer[bCnt++]    =   '2';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   'T';
baCommBuffer[bCnt++]    =   'W';
baCommBuffer[bCnt++]    =   'O';
baCommBuffer[bCnt++]    =   PARAMETER_SEPERATOR;
baCommBuffer[bCnt++]    =   'A';
baCommBuffer[bCnt++]    =   'C';
baCommBuffer[bCnt++]    =   'K';    
}
else
{
baCommBuffer[bCnt++]    =   '1';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   'N';
baCommBuffer[bCnt++]    =   'A';
baCommBuffer[bCnt++]    =   'C';
baCommBuffer[bCnt++]    =   'K';        
}
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   '*';
memset(baTempBuff,0,sizeof(baTempBuff));
bCsum = CalculateCheckSum(baCommBuffer);
sprintf((char*)baTempBuff,"%.2X",bCsum);
memcpy(baCommBuffer+bCnt,baTempBuff,2);
bzero(baTempBuff,sizeof(baTempBuff));
bCnt+=2;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   END_CHAR;
baCommBuffer[bCnt++]    =   END_CHAR;

#ifdef _DEBUG_DEEP_DETAILED
            if(EDebugDeepDetail<GetDebugLevelOfPMC())
            {
                    printf("WILL BE sent: %s uzunluk:%d\n", baCommBuffer,bCnt);
                    sprintf(caLogStr,"WILL BE sent: %s uzunluk:%d\n", baCommBuffer,bCnt);
                    PrintToLogFile(caLogStr);
                    memset(caLogStr,0,MAX_LOG_STRLEN);
                }
#endif

        if((ETcpConnectionState== ETcpStateConnected) || (ETcpConnectionState== ETcpStateConnectedAndWaitingToWrite) )
        {

            if (write(sockfd,baCommBuffer,bCnt) < 0)
            {
                #ifdef _DEBUG_DETAILED
                if(EDebugDetail<GetDebugLevelOfPMC())
                {
                     perror("ERROR writing to socket"); 
                     PrintToLogFile("ERROR writing to socket");

                 }
                 #endif
             return 0;
            }
                #ifdef _DEBUG_DEEP_DETAILED
                if(EDebugDeepDetail<GetDebugLevelOfPMC())
                {
                    printf("sent: %s uzunluk:%d\n", baCommBuffer,bCnt);
                    sprintf(caLogStr,"sent: %s uzunluk:%d\n", baCommBuffer,bCnt);
                    PrintToLogFile(caLogStr);
                    memset(caLogStr,0,MAX_LOG_STRLEN);
                }
                #endif
        }
        else
        {
                #ifdef _DEBUG_DETAILED
                    if(EDebugDetail<GetDebugLevelOfPMC())
                    {
                    PrintToLogFile("Henüz Bağlantı Yok\n");
                    }
                #endif
                return 0;
        }


return (bCnt);  

}

下面您可以看到运行时没有错误的代码:

unsigned char PrepareResponseForConnectionTest(void)
{

unsigned char baTempBuff[20]={0};
unsigned char bCnt=0,i=0,bCsum=0;
time_t lEpochTime;
time_t lSessionTime;

memset(baTempBuff,0,sizeof(baTempBuff));
memset(baCommBuffer,0,sizeof(baCommBuffer));
bzero(baCommBuffer,MAX_PMS_MESSAGE_LEN);
bzero(baTempBuff,sizeof(baTempBuff));


lEpochTime = time(NULL);
baCommBuffer[bCnt++]    =   START_CHAR;
baCommBuffer[bCnt++]    =   START_CHAR;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
sprintf((char*)baTempBuff,"%ld",(unsigned long)lEpochTime);
memcpy(baCommBuffer+bCnt,baTempBuff,10);

bzero(baTempBuff,sizeof(baTempBuff));
bCnt+=10;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;

lSessionTime = SPMSMessage.lSessionID; 
sprintf((char*)baTempBuff,"%ld",(unsigned long)lSessionTime);
memcpy(baCommBuffer+bCnt,baTempBuff,10);
bzero(baTempBuff,sizeof(baTempBuff));
bCnt+=10;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   PMC_ID;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   PMS_ID;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   'R';
baCommBuffer[bCnt++]    =   'E';
baCommBuffer[bCnt++]    =   'P';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   'C';
baCommBuffer[bCnt++]    =   'O';
baCommBuffer[bCnt++]    =   'N';
baCommBuffer[bCnt++]    =   'T';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   '1';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   'A';
baCommBuffer[bCnt++]    =   'C';
baCommBuffer[bCnt++]    =   'K';
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   '*';
memset(baTempBuff,0,sizeof(baTempBuff));
bCsum = CalculateCheckSum(baCommBuffer);
sprintf((char*)baTempBuff,"%.2X",bCsum);
memcpy(baCommBuffer+bCnt,baTempBuff,2);
bzero(baTempBuff,sizeof(baTempBuff));
bCnt+=2;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   END_CHAR;
baCommBuffer[bCnt++]    =   END_CHAR;



        if((ETcpConnectionState== ETcpStateConnected) || (ETcpConnectionState== ETcpStateConnectedAndWaitingToWrite) )
        {

            if (write(sockfd,baCommBuffer,bCnt) < 0)
            {
             perror("ERROR writing to socket\n");
             PrintToLogFile("ERROR writing to socket\n");
            }
                #ifdef _DEBUG_DEEP_DETAILED
                if(EDebugDeepDetail<GetDebugLevelOfPMC())
                {
                    printf("sent: %s uzunluk:%d\n", baCommBuffer,bCnt);
                    sprintf(caLogStr,"sent: %s uzunluk:%d\n", baCommBuffer,bCnt);
                    PrintToLogFile(caLogStr);
                    memset(caLogStr,0,MAX_LOG_STRLEN);
                }
                #endif
                return 0;
        }
        else
        {
                #ifdef _DEBUG_DETAILED
                    if(EDebugDetail<GetDebugLevelOfPMC())
                    {
                    PrintToLogFile("There is no connection yet\n");
                    }
                #endif
                //return 0;
        }

        //printf("\n\n");
return (bCnt);
}

这是我的 InitializeConnection 函数和 ConnectToServer 函数:

void InitializeTcpConnection(int argc, char *argv[])
{
   int optval;
   socklen_t optlen = sizeof(optval);
ETcpConnectionState = ETcpStateNotConnected;
    if (argc < 3) 
    {
       fprintf(stderr,"usage: %s hostname_or_ip port\n", argv[0]);
       #ifdef _DEBUG_PROCESS
       if(EDebugProcess<GetDebugLevelOfPMC())
       {
        sprintf(caLogStr,"usage: %s hostname_or_ip port\n", argv[0]);
        PrintToLogFile(caLogStr);
        memset(caLogStr,0,MAX_LOG_STRLEN);
        }
       #endif
       exit(0);
    }
    portno = atoi(argv[2]);
    /* int socket(domain,type,protocol)
     * socket creates an endpoint for communication and returns a descriptor
     * AF_INET: ARPA Internet protocols
     * SOCK_STREAM: sequenced, two way connection based byte streams
     * 
     * return: Socket returns a non-negative descriptor on success.
     * On failure it returns -1 and sets errno to indicate the error
     * */
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        #ifdef _DEBUG_PROCESS
        if(EDebugProcess<GetDebugLevelOfPMC())
        {
        perror("ERROR creating socket");
        PrintToLogFile("ERROR creating socket\n");

        }
        #endif
        exit(1);
    }

    /**/


   /* Set the option active */
   optval = 1;
   optlen = sizeof(optval);
   if(setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen) < 0) 
   {
      #ifdef _DEBUG_PROCESS
      if(EDebugProcess<GetDebugLevelOfPMC())
        {
          perror("setsockopt()");
          PrintToLogFile("ERROR creating socket\n");
        }
      #endif
      close(sockfd);
      exit(EXIT_FAILURE);
   }
   #ifdef _DEBUG_PROCESS
   if(EDebugProcess<GetDebugLevelOfPMC())
   {
    printf("SO_KEEPALIVE set on socket\n");
    PrintToLogFile("SO_KEEPALIVE set on socket\n");
    }
      #endif
   /* Check the status again */
   if(getsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &optval, &optlen) < 0) {
       #ifdef _DEBUG_PROCESS
       if(EDebugProcess<GetDebugLevelOfPMC())
       {
          perror("getsockopt()");
          PrintToLogFile("getsockopt()");
      }
      #endif
      close(sockfd);
      exit(EXIT_FAILURE);
   }
   #ifdef _DEBUG_PROCESS
   if(EDebugProcess<GetDebugLevelOfPMC())
   {
   printf("SO_KEEPALIVE is %s\n", (optval ? "ON" : "OFF"));
   }
   #endif

   #ifdef _DEBUG_PROCESS

    if(EDebugProcess<GetDebugLevelOfPMC())
    {
    PrintToLogFile("Setting socket for reusability\n");
    }
   #endif

   if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(int)) == -1) 
   {
       #ifdef _DEBUG_PROCESS
       if(EDebugProcess<GetDebugLevelOfPMC())
       {
                perror("setsockopt");
                PrintToLogFile("Setting socket option error\n");
       }
       #endif
                exit(1);
   }

   /*********/

    //get the address info by either host name or IP address
    SetTcpServerIpAddress(argv[1]);
    server = gethostbyname(argv[1]);
    if (server == NULL) 
    {
        #ifdef _DEBUG_PROCESS
        if(EDebugProcess<GetDebugLevelOfPMC())
        {
        PrintToLogFile("ERROR, no such host\n");
        }
        #endif
        exit(1);
    }

    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
    //serv_addr.sin_port: unsigned short 
    //htons converts the unsigned short hostshort from host byte order to network byte order
    serv_addr.sin_port = htons(portno);


    ETcpConnectionState = ETcpStateWaitingForConnection;

}

int ConnectToServer(void)
{
                    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)  
                    {
                        #ifdef _DEBUG_DETAILED
                        if(EDebugDetail<GetDebugLevelOfPMC())
                        {
                        PrintToLogFile("ERROR connecting");
                        }
                        #endif
                        return 1; // connection error
                        //exit(1);
                    }
                    else
                    {
                        #ifdef _DEBUG_DETAILED
                        if(EDebugDetail<GetDebugLevelOfPMC())
                        {
                        PrintToLogFile("connection established\n");
                        }
                        #endif
                    #ifndef PMS_COMM_POLL_MODE
                        #ifdef _DEBUG_DETAILED
                        if(EDebugDetail<GetDebugLevelOfPMC())
                        {
                        PrintToLogFile("State is non poll mode\n");
                        }
                        #endif
                    ETcpConnectionState = ETcpStateConnected;
                    #endif
                    #ifdef PMS_COMM_POLL_MODE
                        #ifdef _DEBUG_DETAILED
                        if(EDebugDetail<GetDebugLevelOfPMC())
                        {
                        PrintToLogFile("State is poll mode\n"); 
                        }
                        #endif
                    ETcpConnectionState = ETcpStateConnectedAndWaitingToRead;
                    #endif

                    SendRequestToGetImageUploadInfo();
                    }
return 0;   
}

一般来说,当遇到“Bad File Descriptor”时,意味着你传入API的socket文件描述符无效,这有多种可能的原因:

  1. fd 已经在某个地方关闭了。
  2. fd值错误,与socket() api获取的值不一致
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux Socket write() 的错误文件描述符 错误的文件描述符 C 的相关文章

  • Microsoft Graph API 授权错误:无效受众

    我知道这是一个很长的问题 但如果有人能与我分享他们的想法或经验 我真的很感激 因为我已经解决这个问题几天了 现在正在尝试很多事情 我有一个 ASP Net Core 3 1 Web API 应用程序和一个 ASP NET Core 3 1
  • 查找系统日志最大消息长度

    大多数 Unix 程序员都会习惯由syslog h 并且许多实现 例如 glibc 对发送给它的 syslog 消息的大小没有真正的限制 但通常对侦听的应用程序有限制 dev log 我想知道是否有人知道如何找到系统日志的最大消息大小 或者
  • Lambda、封闭变量、显示类、可序列化性和流行层

    我已经为 Compact Framework 实现了一个流行层 包括BinaryFormatter 类似序列化器 我希望能够在适当的情况下序列化编译器生成的类 这些类是由 lambda 和迭代器等产生的 这样如果 例如 lambda 及其封
  • Windows Server / Datacenter:设置 CPU 关联性 > 64 个核心

    SetThreadAffinityMask 允许为 64 个逻辑核心 处理器 设置关联掩码 但是 Windows Datacenter 最多可以有 64 个 CPU 每个 CPU 都有多个内核 请参阅here http social tec
  • 如何在 Xamarin.Forms 中强制使用浅色模式?

    我的应用程序的 UI 设计为在灯光模式下使用 但如果手机的默认主题是深色模式 我的应用程序也会切换到深色模式 并且 UI 看起来很垃圾 所以我想强制我的应用程序使用灯光模式 我怎样才能做到这一点 In my app xaml我使用的文件Us
  • 如何将 list 对象附加到另一个对象

    在 C 中 我有两个list
  • 在 C++ 中重用异常处理代码

    我有这两个函数 具有重复的异常处理 其唯一目的是显示错误消息 void func1 noexcept try do task do another task catch const std out of range e show msg O
  • Clang 使用 -nostdlib 生成崩溃代码

    我正在尝试为可执行文件设置自己的运行时环境 但无法使用 clang v3 4 1ubuntu1 目标 x86 64 pc linux gnu 来生成没有段错误的可执行文件 我已将问题简化为以下内容 如果我有一个文件 crt1 c 除了满足
  • 如何存储生成的格式化 C 字符串

    这是一个新手问题 为了创建格式化的 C 字符串 我使用printf like int n 10 printf My number is i 10 但是 怎么样 int n 10 char msg My number is i 10 prin
  • 枚举和枚举类之间的区别[重复]

    这个问题在这里已经有答案了 谁能解释一下两者之间的区别 enum Type1 type2 And enum class Type1 type2 我经常使用前者 可能太频繁而没有足够的封装 但我从未使用过第二个例子 Thanks enum A
  • 如何在 .NET 6.0 中使用最小 Api 配置 Newtonsoft Json

    I have net6 0具有最少 api 的项目 我想使用NetwtonsoftJson而不是内置的System Text Json用于序列化和反序列化的库 目前我有这个配置JsonOptions并且按预期工作 builder Servi
  • 二叉树实现C++

    二叉树插入 include stdafx h include
  • 更改子进程中的 iostream

    现在 我正在开发一个项目 其中我需要启动一个子进程来使用 C 在 Linux 中执行一个新程序 并且我需要重定向标准输入和输出 就像在 C 中一样 它们是cin and cout 到一个文件 这意味着在子进程中 标准输入和输出都是文件 子进
  • 拦截C# HttpClient GetAsync

    我有一个 Web 项目 C MVC5 但没有 WebAPI 和一个简单的 HTTP REST 客户端 该客户端调用外部 REST 服务并获取 accessToken 等 我想检查所有 Get PostAsync 调用对 statusCode
  • 是否可以允许jenkins访问只有root或某些特定程序可以访问的文件?

    我基本上想做的是允许 jenkins 访问我的 android sdk linux 文件夹和所有子目录 我的老板不想自己更改文件夹的权限 我应该在构建过程中这样做 我见过一些在构建过程中在执行 shell 中运行一些命令的示例 是否可以在该
  • 使用 Entity Framework Core 在运行时迁移

    我正在将 PHP Illuminate 应用程序移植到 ASP NET Core EF Core 其中一部分由类似 Wordpress 的安装过程组成 该过程要求提供数据库凭据 然后创建应用程序运行所需的表 本质上 我想在运行时运行某种迁移
  • 获取当前时间(以小时和分钟为单位)

    我正在尝试从系统收集信息 并且需要获取当前时间 以小时和分钟为单位 目前我有 date awk print 4 输出如下 16 18 54 怎样才能把秒数去掉呢 提供格式字符串 date H M Running man date将给出所有格
  • 如何在c#中打印全尺寸图像

    我正在尝试用 C 打印图像 它是由 Adob e Acrobat 从 PDF 创建的完整 8 5x11 尺寸的 tiff 当我使用下面的代码用 C 打印它时 它垂直打印正确 但水平打印不正确 水平方向被推了大约半英寸 我将图像的原点设置为
  • 如何避免函数的多重定义(Linux、GCC/G++、Code::Blocks)

    我有一个代码块项目 它使用许多不同的文件 通常是由其他程序员编写的 目前我遇到的情况是 我有两个不同的子项目 其中包含以相同方式命名的函数 比方说 F int x 因此 F int x 是在两个不同位置的两个源文件中定义的 并且它们有两个不
  • Kubernetes Pod 已终止 - 退出代码 137

    我需要一些关于 k8s 1 14 和在其上运行 gitlab 管道所面临的问题的建议 许多作业都会抛出退出代码 137 错误 我发现这意味着容器突然终止 集群信息 库伯内特版本 1 14 使用的云 AWS EKS 节点 C5 4xLarge

随机推荐

  • 在Java中检查服务器上的路径是否存在[重复]

    这个问题在这里已经有答案了 我正在创建一个 Java 程序 在其中将文件上传到特定路径上的服务器 我在用jSch for sftp 因此 在上传文件之前 我想检查服务器上是否存在给定的目录 if path exists upload fil
  • 使用 AVAudioEngine 将 AVAudioInputNode 连接到 AVAudioUnitEffect

    我想处理来自设备内置麦克风的音频 AVAudioInputNode 带有音频单元效果 AVAudioUnitEffect 对于我的例子 我正在使用AVAudioUnitReverb 连接中AVAudioUnitReverb导致应用程序崩溃
  • Swift 3:从 UIBezierPath 创建 UIImage

    我有一个UIBezierPath 我最终需要一个UIImageView从中 现在我正在尝试首先创建一个UIImage 然后是一个UIImageView从那 我正在快速工作 并且我已经研究过类似的问题 并且答案要么不起作用 要么产生形状而不是
  • ASP.NET MVC 1 向前兼容 ASP.NET MVC 2 吗?

    我可以使用 MVC 2 程序集顺利运行 MVC 1 应用程序吗 我知道一些 3rd 方工具在 MVC 2 中出现了问题 但我们假设我没有使用这些其他工具 曾经有过重大变化 http go microsoft com fwlink LinkI
  • Pandas:将 Lambda 应用于多个数据帧

    我试图弄清楚如何同时将 lambda 函数应用于多个数据帧 而不需要先将数据帧合并在一起 我正在处理大型数据集 gt 60MM 记录 并且需要格外小心内存管理 我希望有一种方法可以将 lambda 应用于底层数据帧 这样我就可以避免首先将它
  • SSIS Excel 目标空白

    我正在调试一个 SSIS 包 该包从 SQL Server 数据开始 对其进行转换 然后将其放入 Excel 文件中 我在工作中经常这样做 以前从未遇到过这个问题 Excel 文件中没有写入任何行 我将数据查看器附加到通向 Excel 目标
  • Android:如何以编程方式连接/断开 OTG

    我想在我的 Android 设备中以编程方式连接和断开 USB OTG 笔式驱动器 硬盘驱动器等 对于USB 我使用以下路径在连接到PC时绑定 取消绑定USB sys bus usb drivers usb bind or unbind 我
  • Python:读取文件时如何忽略#comment行

    在Python中 我刚刚从文本文件中读取了一行 我想知道如何编写代码来忽略行开头带有哈希 的注释 我认为应该是这样的 for if line contain then process line else end for loop 但我是Py
  • JavaScript 对象如何引用其自身的值? [复制]

    这个问题在这里已经有答案了 假设我有以下 JavaScript var obj key1 it key2 key1 works alert obj key2 此错误显示 key1 未定义 我努力了 this key1 this key1 o
  • 单个部分的垂直滚动

    我必须制作一个具有垂直滚动过渡效果的部分 请观看此处的视频以供参考 https drive google com file d 1Fy4BDqc0 LDrPnEVYuQZdiJ0Pk9qDXA5 view usp sharing https
  • 将自定义对象传递给 Web 服务

    我正在使用 C 并且有 Windows 窗体和 Web 服务 我有一个自定义对象 我想将其发送到网络服务 有时 该对象可能包含大量数据 作为最佳性能 将自定义对象发送到 Web 服务的最佳方式是什么 Web 服务旨在处理自定义对象 只要它们
  • 使用 cython 加速数千个集合操作

    我一直在努力克服对 Cython 的恐惧 恐惧是因为我对 c 或 c 一无所知 我有一个函数需要 2 个参数 一个集合 我们称之为testSet 和一个集合列表 我们称之为targetSets 然后该函数会迭代targetSets 并计算与
  • 如何保护 Google Kubernetes Engine (GKE) 中的只读端口 10255?

    我创建了一个 GKE 私有集群 版本 1 13 6 gke 13 使用以下命令 gcloud container clusters create a cluster with user pass network vpc name subne
  • 实现编译时机制检查字符串的唯一性

    定义我的问题的最简单方法是我正在尝试实现一种机制来检查是否已使用相同的字符串 或一对 数字 字符串 我希望使用 C 预处理器以智能方式实现此机制 我还希望这种机制在调试模式下出现冲突或运行时错误时 通过检查断言 给我编译错误 我们不希望开发
  • IIS 替换部分 url

    我正在尝试使用 iis 中的 url 重写将 url 中的 se 替换为 sv 网址如下所示 www somedomain com se baadmarked 巴德 并且应该看起来像这样 www somedomain com sv baad
  • 网络安全字体粗细——如何变细?

    当我在 Photoshop 中设计时 我的字体又薄又清晰 但当我在 CSS 中声明字体时 即使使用 font weight lighter 字体总是显得更粗 也许这就是浏览器渲染字体的方式 在 IE 中字体保持细长 但我想知道是否有任何技巧
  • 以编程方式检索 OS X 磁盘分区 UUID

    我有一个分区的路径 如何在不使用终端命令的情况下以编程方式检索该分区的 UUID 举个例子会更有帮助 diskutil info grep UUID 从 C 运行它作为读者的练习 如果您想要根目录以外的分区 您可以指定挂载点或设备名称 例如
  • sp_spaceused - 如何测量 SQL 中所有表的大小(以 GB 为单位)

    继讨论之后如何在 SQL 中测量表中的表大小 以 GB 为单位 https stackoverflow com questions 7071473 我正在寻找一种解决方案来使用存储过程单独测量 SQL Server 的所有表所使用的空间sp
  • 如何将页面图片拉直,使其看起来像扫描的一样?

    我看过应用程序 想知道如何以编程方式拍摄图像 定义它需要如何转换 以便它看起来与相机平行 而不是倾斜透视 然后合并多张照片以创建 pdf 文件 例如这个应用程序就是这样做的 我不会用书籍来做这些琐碎的事情 所以很抱歉我不能推荐任何书籍 尤其
  • Linux Socket write() 的错误文件描述符 错误的文件描述符 C

    我对 write 2 函数有一个有趣的问题 PrepareResponseForSetCoordinates 函数会导致写入时出现错误的文件描述符错误 这是错误行 perror 写入套接字时出错 总产量 写入套接字时出错 文件描述符错误 我