小编use*_*143的帖子

将大字符串发送到套接字

我是C ++的新手,后来遇到了这个问题。我正在尝试将大字符串发送到套接字。我已经在堆栈上看到了类似的问题,但是找不到真正的答案。例如这些:

通过套接字C ++发送长字符串

使用C ++(Winsock TCP / IP)发送带有套接字的字符串

C ++通过套接字发送字符串

他们中的大多数人依赖于这样的事实:send一次调用即可发送全部数据,或者他们将使用char *代替std::string

这是用C语言编写的小代码:

int SendAll(SOCKET client_socket, const void *data, int data_size)
{
    const char *data_ptr = (const char*) data;
    int bytes_sent;

    while (data_size > 0)
    {
        bytes_sent = send(client_socket, data__ptr, data_size, 0);
        if (bytes_sent == SOCKET_ERROR)
            return -1;

        data_ptr += bytes_sent;
        data_size -= bytes_sent;
    }

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

现在想象一下,而不是const void *data我们拥有std::string data。现在的问题是我如何可以移动指针到数据像这样data_ptr += bytes_sent;std::string

我出现的一种方法是检索 …

c++ sockets string

7
推荐指数
1
解决办法
178
查看次数

Winapi:获取具有特定文件句柄的进程

目前我有一个带有文件过滤器驱动程序的软件,在软件安装过程中,驱动程序以以下方式作为服务启动:

CreateService(serviceManager, name, displayName,
                          SERVICE_START | DELETE | SERVICE_QUERY_STATUS | SERVICE_STOP,
                              SERVICE_FILE_SYSTEM_DRIVER, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE,
                                  path, NULL, NULL, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

路径在哪里C:\Program Files(x86)\TSU\driver\TSUfsd.sys

我遇到的问题是在卸载软件期间。当软件尝试删除TSUfsd.sys文件时,它会拒绝我的访问。

我检查了软件如何删除驱动程序,结果发现它用DeleteService功能删除它,并等待服务将其状态从 更改SERVICE_STOP_PENDINGSERVICE_STOPPED,如果一段时间后没有发生,它会获取服务PID并用 and 杀死ProcessTerminate它然后尝试删除该文件rmdir /S /Q C:\Program Files(x86)\TSU\

我试图找到可能拥有文件句柄的进程(使用 Process Explorer),但找不到任何进程。然后我想也许该服务仍然存在,所以我输入了sc query TSUfsd但服务也消失了。

我还尝试更改权限并向我的用户授予完全权限,但仍然出现相同的错误。

所以我的问题是:

  1. 还有其他方法可以检查哪个进程(或其他任何进程)可以保存文件吗?

  2. 我还注意到,每当我尝试使用 Cygwin( ) 删除文件时,rm TSUfsd.sys它都会毫无问题地删除该文件。使用 cmd( ) 删除文件和使用 cygwin 删除文件有什么区别del /f <filename>

c windows winapi cygwin cmd

4
推荐指数
1
解决办法
2677
查看次数

初始化具有大小的类成员向量失败

我是c ++的新手,遇到了这个问题.这是我的代码:

class A
{
    std::vector <int> vec(10);
};
Run Code Online (Sandbox Code Playgroud)

它给了我错误的说法expected a type specifier.我知道这种初始化向量的方式是不可接受的,它应该在构造函数中完成,但我很好奇为什么会失败.我也注意到了这个:

class A
{
    std::vector <int> vec = std::vector<int>(10);
};
Run Code Online (Sandbox Code Playgroud)

工作得很好.

所以我的问题是为什么第二种情况仍然有效,即使我们仍然使用"预定义大小"(std::vector<int>(10))创建向量,为什么第一种情况会失败?谢谢.

PS 我正在尝试创建大小为10个整数的向量,而不是创建一个10已插入其中的向量.

c++ class vector visual-studio

3
推荐指数
1
解决办法
124
查看次数

标签 统计

c++ ×2

c ×1

class ×1

cmd ×1

cygwin ×1

sockets ×1

string ×1

vector ×1

visual-studio ×1

winapi ×1

windows ×1