首页 > 其他分享 >C语言函数大全-- _w 开头的函数(5)

C语言函数大全-- _w 开头的函数(5)

时间:2023-05-20 23:32:34浏览次数:66  
标签:const 函数 -- C语言 int mode 进程 wchar include

C语言函数大全

本篇介绍C语言函数大全-- _w 开头的函数

1. _wspawnl

1.1 函数说明

函数声明 函数功能
int _wspawnl(int mode, const wchar_t* cmdname, const wchar_t* arglist, ...); 启动一个新的进程并运行指定的可执行文件

参数:

  • mode : 启动命令的模式,可以是 _P_WAIT_P_NOWAIT 的任意一种:
    • _P_WAIT :等待新进程结束之后才继续执行当前进程
    • _P_NOWAIT :不等待新进程结束,立即返回并继续执行当前进程
  • cmdname : 要执行的可执行文件的名称,可以包含完整路径或者只有文件名。如果只有文件名,则将从当前工作目录中查找可执行文件。如果当前工作目录中没有找到该文件,则将失败并返回错误代码。
  • arglist : 可选,传递给子进程的命令行参数字符串。多个参数以空格分隔
  • ... : 可选,用于传递命令行参数的可变参数列表,必须以一个 NULL 结尾

1.2 演示示例

1.2.1 SubTest.c
#include <stdio.h>
int main(int argc, char *argv[])
{
	printf("exec %s, Hello, %s", argv[0], argv[1]);
 	return 0;
} 
1.2.2 Test.c
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* cmdname = L"SubTest.exe";
    const wchar_t* arglist = L"SubTest.exe huazie";

    // 同步启动新进程,等待子进程完成
    int mode = _P_WAIT;

    // 启动新进程
    int result = _wspawnl(mode, cmdname, arglist, NULL);

    // 打印子进程的退出代码
    printf("\nChild process exited with code %d\n", result);

    return 0;
}

注意: 上述示例是一个同步(阻塞)调用。如果你想启动一个异步进程(不等待它结束),则可以将 mode 参数设置为 _P_NOWAIT。在这种情况下,函数会立即返回,父进程不会等待新进程完成。

1.3 运行结果

在这里插入图片描述

2. _wspawnle

2.1 函数说明

函数声明 函数功能
int _wspawnle(int mode, const wchar_t* cmdname, const wchar_t* arglist, ... , const wchar_t* envptr[]); 启动一个新的进程并通过指定的环境变量传递参数,来运行指定的可执行文件

参数:

  • mode : 启动命令的模式,可以是 _P_WAIT_P_NOWAIT 的任意一种:
    • _P_WAIT :等待新进程结束之后才继续执行当前进程
    • _P_NOWAIT :不等待新进程结束,立即返回并继续执行当前进程
  • cmdname : 要执行的可执行文件的名称,可以包含完整路径或者只有文件名。如果只有文件名,则将从当前工作目录中查找可执行文件。如果当前工作目录中没有找到该文件,则将失败并返回错误代码。
  • arglist : 可选,传递给子进程的命令行参数字符串。多个参数以空格分隔
  • ... : 可选,用于传递命令行参数的可变参数列表,必须以一个 NULL 结尾
  • envptr: 可选,包含所有需要在子进程中使用的环境变量。如果为 NULL,则子进程使用调用进程的当前环境

2.2 演示示例

2.2.1 SubEnvTest.c
#include <process.h>
#include <processenv.h>
#include <stdio.h>

int main(int argc, char *argv[], char **envp)
{
	printf("SubEnvTest Command line arguments:\n");
	for (int i=0; i<argc; i++)
        printf("[%d] : %s\n", i, argv[i]);
	printf("exec %s, Hello, %s\n", argv[0], argv[1]);

	for (int i = 0; envp[i] != NULL; i++)
	{
		printf("%s\n", envp[i]);
	}

	// while(*envp != NULL)
 	//    printf("  %s\n", *(envp++));

 	return 0;
} 
2.2.2 Test.c
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* cmdname = L"SubEnvTest.exe";
    const wchar_t* arglist[] = { L"SubEnvTest.exe", L"Huazie", NULL };
    const wchar_t* envptr[] = { L"Hello=world", NULL };

    // 同步启动新进程,等待子进程完成
    int mode = _P_WAIT;

    // 启动新进程
    int result = _wspawnle(mode, cmdname, arglist[0], arglist[1], NULL, envptr);

    // 打印子进程的退出代码
    printf("\nChild process exited with code %d\n", result);

    return 0;
}

2.3 运行结果

在这里插入图片描述

3. _wspawnlp

3.1 函数说明

函数声明 函数功能
int _wspawnl(int mode, const wchar_t* cmdname, const wchar_t* arg0, ...); 启动一个新的进程并运行指定的可执行文件。它与 _wspawnl 函数类似,但参数列表略有不同

参数:

  • mode : 启动命令的模式,可以是 _P_WAIT_P_NOWAIT 的任意一种:
    • _P_WAIT :等待新进程结束之后才继续执行当前进程
    • _P_NOWAIT :不等待新进程结束,立即返回并继续执行当前进程
  • cmdname : 要执行的可执行文件的名称,可以包含完整路径或者只有文件名。如果只有文件名,则会在环境变量 PATH 指定的目录中查找可执行文件
  • arg0 : 可选,第一个命令行参数字符串
  • ... : 可选,用于传递命令行参数的可变参数列表,必须以一个 NULL 结尾

3.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* cmdname = L"java.exe";
    const wchar_t* arg0 = L"java.exe";
    const wchar_t* arg1 = L"-version";

    // 同步启动新进程,等待子进程完成
    int mode = _P_WAIT;

    // 启动新进程
    int result = _wspawnlp(mode, cmdname, arg0, arg1, NULL);

    // 打印子进程的退出代码
    printf("\nChild process exited with code %d\n", result);

    return 0;
}

3.3 运行结果

在这里插入图片描述

4. _wspawnlpe

4.1 函数说明

函数声明 函数功能
int _wspawnlpe(int mode, const wchar_t* cmdname, const wchar_t* arg0, ... , const wchar_t* envptr[]); 用于启动一个新进程并运行指定的可执行文件。它与 _wspawnle 函数类似,但参数列表略有不同

参数:

  • mode : 启动命令的模式,可以是 _P_WAIT_P_NOWAIT 的任意一种:
    • _P_WAIT :等待新进程结束之后才继续执行当前进程
    • _P_NOWAIT :不等待新进程结束,立即返回并继续执行当前进程
  • cmdname : 要执行的可执行文件的名称,可以包含完整路径或者只有文件名。如果只有文件名,则会在环境变量 PATH 指定的目录中查找可执行文件
  • arg0 : 可选,第一个命令行参数字符串
  • ... : 可选,用于传递命令行参数的可变参数列表,必须以一个 NULL 结尾
  • envptr: 可选,包含所有需要在子进程中使用的环境变量。如果为 NULL,则子进程使用调用进程的当前环境

4.2 演示示例

4.2.1 SubEnvTest.c

参考 2.2.1 中所示即可,不再赘述

4.2.2 Test.c
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* cmdname = L"SubEnvTest.exe";
    const wchar_t* arg0 = L"SubEnvTest.exe";
    const wchar_t* arg1 = L"Huazie";
    const wchar_t* arg2 = L"helloworld";
    const wchar_t* envp[] = { L"key=value", NULL };

    // 同步启动新进程,等待子进程完成
    int mode = _P_WAIT;

    // 启动新进程
    int result = _wspawnlpe(mode, cmdname, arg0, arg1, arg2, NULL, envp);

    // 打印子进程的退出代码
    printf("Child process exited with code %d\n", result);

    return 0;
}

4.3 运行结果

在这里插入图片描述

5. _wspawnv

5.1 函数说明

函数声明 函数功能
int _wspawnv(int mode, const wchar_t* cmdname, const wchar_t* const argv[]); 用于启动一个新进程并运行指定的可执行文件

参数:

  • mode : 启动命令的模式,可以是 _P_WAIT_P_NOWAIT 的任意一种:
    • _P_WAIT :等待新进程结束之后才继续执行当前进程
    • _P_NOWAIT :不等待新进程结束,立即返回并继续执行当前进程
  • cmdname : 要执行的可执行文件的名称,可以包含完整路径或者只有文件名。如果只有文件名,则将从当前工作目录中查找可执行文件。如果当前工作目录中没有找到该文件,则将失败并返回错误代码。
  • argv : 要传递给子进程的命令行参数。该数组中最后一个元素必须是 NULL

5.2 演示示例

5.2.1 SubTest.c

参考 1.2.1 中所示即可,不再赘述

5.2.2 Test.c
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* cmdname = L"SubTest.exe";
    const wchar_t* argv[] = { L"SubTest.exe", L"Huazie", NULL };

    // 同步启动新进程,等待子进程完成
    int mode = _P_WAIT;

    // 启动新进程
    int result = _wspawnv(mode, cmdname, argv);

    // 打印子进程的退出代码
    printf("\nChild process exited with code %d\n", result);

    return 0;
}

5.3 运行结果

在这里插入图片描述

6. _wspawnve

6.1 函数说明

函数声明 函数功能
int _wspawnve(int mode, const wchar_t* cmdname, const wchar_t* const argv[], const wchar_t* const envp[]); 用于启动一个新进程并运行指定的可执行文件

参数:

  • mode : 启动命令的模式,可以是 _P_WAIT_P_NOWAIT 的任意一种:
    • _P_WAIT :等待新进程结束之后才继续执行当前进程
    • _P_NOWAIT :不等待新进程结束,立即返回并继续执行当前进程
  • cmdname : 要执行的可执行文件的名称,可以包含完整路径或者只有文件名。如果只有文件名,则将从当前工作目录中查找可执行文件。如果当前工作目录中没有找到该文件,则将失败并返回错误代码。
  • argv : 要传递给子进程的命令行参数。该数组中最后一个元素必须是 NULL
  • envp: 可选,包含所有需要在子进程中使用的环境变量。如果为 NULL,则子进程使用调用进程的当前环境

6.2 演示示例

6.2.1 SubEnvTest.c

参考 2.2.1 中所示即可,不再赘述

6.2.2 Test.c
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* cmdname = L"SubEnvTest.exe";
    const wchar_t* argv[] = { L"SubEnvTest.exe", L"Huazie", L"helloworld", NULL };
    const wchar_t* envp[] = { L"key=value", NULL };

    // 同步启动新进程,等待子进程完成
    int mode = _P_WAIT;

    // 启动新进程
    int result = _wspawnve(mode, cmdname, argv, envp);

    // 打印子进程的退出代码
    printf("Child process exited with code %d\n", result);

    return 0;
}

6.3 运行结果

在这里插入图片描述

7. _wspawnvp

7.1 函数说明

函数声明 函数功能
int _wspawnvp(int mode, const wchar_t* cmdname, const wchar_t* const argv[]); 用于启动一个新进程并运行指定的可执行文件

参数:

  • mode : 启动命令的模式,可以是 _P_WAIT_P_NOWAIT 的任意一种:
    • _P_WAIT :等待新进程结束之后才继续执行当前进程
    • _P_NOWAIT :不等待新进程结束,立即返回并继续执行当前进程
  • cmdname : 要执行的可执行文件的名称,可以包含完整路径或者只有文件名。如果只有文件名,则会在环境变量 PATH 指定的目录中查找可执行文件
  • argv : 要传递给子进程的命令行参数。该数组中最后一个元素必须是 NULL

7.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* cmdname = L"java.exe";
    const wchar_t* argv[] = { L"java.exe", L"-version", NULL };

    // 同步启动新进程,等待子进程完成
    int mode = _P_WAIT;

    // 启动新进程
    int result = _wspawnvp(mode, cmdname, argv);

    // 打印子进程的退出代码
    printf("\nChild process exited with code %d\n", result);

    return 0;
}

7.3 运行结果

在这里插入图片描述

8. _wspawnvpe

8.1 函数说明

函数声明 函数功能
int _wspawnvpe(int mode, const wchar_t* cmdname, const wchar_t* const argv[], const wchar_t* const envp[]); 用于启动一个新进程并运行指定的可执行文件

参数:

  • mode : 启动命令的模式,可以是 _P_WAIT_P_NOWAIT 的任意一种:
    • _P_WAIT :等待新进程结束之后才继续执行当前进程
    • _P_NOWAIT :不等待新进程结束,立即返回并继续执行当前进程
  • cmdname : 要执行的可执行文件的名称,可以包含完整路径或者只有文件名。如果只有文件名,则会在环境变量 PATH 指定的目录中查找可执行文件
  • argv : 要传递给子进程的命令行参数。该数组中最后一个元素必须是 NULL
  • envp: 可选,包含所有需要在子进程中使用的环境变量。如果为 NULL,则子进程使用调用进程的当前环境

8.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* cmdname = L"java.exe";
    const wchar_t* argv[] = { L"java.exe", L"-version", NULL };
    const wchar_t* envp[] = { L"key=value", NULL };

    // 同步启动新进程,等待子进程完成
    int mode = _P_WAIT;

    // 启动新进程
    int result = _wspawnvpe(mode, cmdname, argv, envp);

    // 打印子进程的退出代码
    printf("Child process exited with code %d\n", result);

    return 0;
}

8.3 运行结果

在这里插入图片描述

9. _wsystem

9.1 函数说明

函数声明 函数功能
int _wsystem(const wchar_t* command); 用于执行操作系统命令。它会启动一个新进程来执行指定的命令,并等待该进程完成。在命令执行过程中,父进程将会被阻塞。

参数:

  • command: 要执行的命令字符串,可以是一个简单的命令名或者是一个完整的命令行

返回值:

  • 如果命令执行成功,则返回执行命令后的退出代码;
  • 如果命令执行失败,则返回一个负数。

9.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <process.h>

int main()
{
    const wchar_t* command = L"cmd /c copy file1.txt file2.txt";

    // 执行命令
    int result = _wsystem(command);

    // 检查命令是否执行成功
    if (result == -1) {
        wprintf(L"Failed to run command.\n");
        return 1;
    }

    // 打印命令的退出代码
    wprintf(L"Command exited with code %d\n", result);

    return 0;
}

9.3 运行结果

运行前: 在这里插入图片描述 运行后: 在这里插入图片描述

10. _wsearchenv

10.1 函数说明

函数声明 函数功能
int _wsearchenv(const wchar_t* file, const wchar_t* envvar, wchar_t* pathname); 用于在指定的路径中查找指定的文件名

参数:

  • file : 要查找的文件名
  • envvar: 可选参数,可以用来指定一个环境变量名,该环境变量包含一个路径列表,其中包括要搜索的文件所在的路径。如果未提供环境变量名,则函数将仅搜索当前工作目录。
  • pathname : 存储找到的文件的完整路径的缓冲区。如果找到了文件,则将完整路径复制到这个缓冲区中

返回值:

  • 如果找到了指定的文件,则返回一个非零值
  • 否则返回 0

注意: 该函数会先在当前工作目录中搜索指定的文件名,如果找不到,则按照提供的路径列表逐一搜索,直到找到为止。

10.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

#define MAX_PATH 200

int main()
{
    const wchar_t* file = L"notepad.exe";
    wchar_t path[MAX_PATH];

    // 在 PATH 环境变量中查找文件
    _wsearchenv(file, L"PATH", path);

    // 打印文件的完整路径
    wprintf(L"Found file at: %ls\n", path);

    return 0;
}

10.3 运行结果

在这里插入图片描述

11. _wsplitpath

11.1 函数说明

函数声明 函数功能
void _wsplitpath(const wchar_t* path, wchar_t* drive, wchar_t* dir, wchar_t* fname, wchar_t* ext); 用于将路径名分解为其组成部分:驱动器、目录、文件名和扩展名

参数:

  • path : 要分解的路径名
  • drive : 用于存储驱动器号的缓冲区。如果路径名没有驱动器号,则该缓冲区将包含空字符串
  • dir : 用于存储目录部分的缓冲区。如果路径名中不包含目录,则该缓冲区将包含空字符串
  • fname : 用于存储文件名部分的缓冲区。如果路径名中既不包含文件名也不包含扩展名,则该缓冲区将包含空字符串
  • ext : 用于存储扩展名部分的缓冲区。如果路径名中不包含扩展名,则该缓冲区将包含空字符串

11.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main()
{
    const wchar_t* path = L"C:\\Windows\\system32\\notepad.exe";
    wchar_t drive[_MAX_DRIVE];
    wchar_t dir[_MAX_DIR];
    wchar_t fname[_MAX_FNAME];
    wchar_t ext[_MAX_EXT];

    _wsplitpath(path, drive, dir, fname, ext);

    wprintf(L"Drive: %ls\n", drive);
    wprintf(L"Directory: %ls\n", dir);
    wprintf(L"Filename: %ls\n", fname);
    wprintf(L"Extension: %ls\n", ext);

    return 0;
}

11.3 运行结果

在这里插入图片描述

12. _wunlink

12.1 函数说明

函数声明 函数功能
int _wunlink(const wchar_t* filename); 用于删除指定的文件

参数:

  • filename : 要删除的文件的完整路径名

返回值:

  • 如果删除成功,则返回值为 0
  • 如果删除失败,则返回值为 -1 ,并且设置了全局变量 errno 来指示错误原因。

12.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main()
{
    const wchar_t* filename = L"myfile.txt";
	// const wchar_t* filename = L"file1.txt";
    int result = _wunlink(filename);

    if (result != 0) 
    {
        perror("Failed to delete file ");
        return 1;
    }

    printf("File deleted successfully.\n");

    return 0;
}

注意: 在实际应用中,我们需要小心谨慎使用 _wunlink() 函数,因为它会永久性地删除文件,而且无法撤销。

12.3 运行结果

在这里插入图片描述

在这里插入图片描述

标签:const,函数,--,C语言,int,mode,进程,wchar,include
From: https://blog.51cto.com/huazie/6318170

相关文章

  • MyCat16——分片规则之全局序列
     1主键重复之前创建了PAYMENT_ADDRESS数据表,根据area\_id的值,进行分片设置。那么在实际使用当中,虽然我们在建表时将id字段设置为了主键,但该主键的作用域仅在单个分片的数据库中起作用。当数据被分到不同的数据库分片中,该设置就会失去作用了。我们的分片规则是:100000-300000......
  • 浮点数在内存中的存储规则
    我们知道,整型在内存中的存储比较简单,在内存中都是以二进制来存储的。然而,浮点型在内存中的存储较为复杂。下面来详细探讨:直接举一个例子:intmain(){intn=9;float*pFloat=(float*)&n;printf("n的值为:%d\n",n);printf("*pFloat的值为:%f\n",*pFloat);*pFloat=9.0;pri......
  • 树相关知识点--零碎笔记
    深入理解前中后序二叉树的前中后序遍历是什么?前中后序遍历,即二叉树结构的前中后位置前序遍历-即刚刚进入一个节点的时候中序遍历-即进入节点之后未离开节点之前后序遍历-即即将离开第一个节点的时候前中后序是遍历二叉树过程中处理每一个节点的三个特殊时间点前--刚刚进入一个二......
  • 配置k8s的一个serviceaccount具有管理员权限并获取他的token
    创建sa账户/授定管理员角色权限cat>sa.yaml<<eofapiVersion:v1kind:ServiceAccountmetadata:name:kubepi-usernamespace:kube-systemeofcat>rolebe.yaml<<eofapiVersion:rbac.authorization.k8s.io/v1kind:ClusterRoleBindingmetadata:na......
  • 深度学习--调用chatgot接口实现
    首先,对于段落文字进行提取主要信息,第一反应要是电脑像人脑就行了,就想到chatgpt进行识别,以下为我识别的文字进行gpt转换。实验结果成立,现在只需要将接口调用,将识别文字传入后,进行字符串拼接,加上:“提取支付时间,消费类型,消费内容”,传入gpt后,将结果返回,输入到程序上,进行识别即可。......
  • Java 网络编程 —— 实现非阻塞式的客户端
    创建阻塞的EchoClient客户程序一般不需要同时建立与服务器的多个连接,因此用一个线程,按照阻塞模式运行就能满足需求publicclassEchoClient{privateSocketChannelsocketChannel=null;publicEchoClient()throwsIOException{socketChannel......
  • redis-cli 使用lua脚本笔记
    前言众所周知,redis可以执行lua脚本,至于为什么要用lua脚本来操作redis,自行百度咯先来讲一下最简单的方式,关于如何在javaspringboot里用lua脚本,请查看我另一篇文章:https://www.cnblogs.com/daen/p/17418024.html更为详细的资料请参考以下文章https://blog.csdn.net/jiayibingd......
  • git命令
    git命令1.常用命令gitclone+要拉取的代码地址gitpulloriginmaster同步主分支gitlog查看loggitinit构建本地仓库gitstatus查看仓库状态gitadd文件将修改的内容添加到暂存区gitcommit-m+修改日志将修改的内容提交到仓库gitpush推送到......
  • 线性dp
    P1725琪露诺一道线性dp的题目状态设置:f[i]:表示到达位置i时的最大价值状态转移:f[i]=max(f[i],f[j]+a[i])(i-r=<j<=i-l)这样做显然枚举状态是O(n)转移也需要O(n),所以时间复杂度是O(n^2)的显然会T状态我们是一定要枚举的,我们能优化的只有转移的计算量,我们需要快速找到......
  • Set集合
    set集合一直以来,JS只能使用数组和对象来保存多个数据,缺乏像其他语言那样拥有丰富的集合类型。因此,ES6新增了两种集合类型(set和map),用于在不同的场景中发挥作用。set用于存放不重复的数据如何创建set集合newSet();//创建一个没有任何内容的set集合newSet(iterable);......