C语言函数大全
本篇介绍C语言函数大全-- _w 开头的函数
1. _wexecl
1.1 函数说明
int _wexecl(const wchar_t *path, const wchar_t *arg0, ... /* , const wchar_t *arg1, ..., NULL */);
它是一个 Windows
平台下的 C
标准库函数,用于在新进程中执行指定的程序
参数:
- path : 指向要执行的可执行文件的完整路径的字符串指针
- arg0: 指向传递给新进程的第一个参数的字符串指针。该参数通常是要执行的程序的名称
- path : 可变参数列表,包含传递给新进程的其他参数。必须以
NULL
结尾
返回值:
- 如果
_wexecl()
函数返回-1
,则说明打开应用程序失败;- 否则,则表示成功打开。
1.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <wchar.h>
int main()
{
// 执行计算器应用
if (_wexecl(L"C:\\Windows\\System32\\calc.exe", L"calc", NULL) == -1)
{
printf("Error launching calculator.\n");
return 1;
}
return 0;
}
在上述的示例代码中,我们使用 _wexecl()
函数打开计算器应用。其中,我们将计算器应用的完整路径作为第一个参数,将应用程序本身的名称作为第二个参数,并在可变参数列表中以 NULL
结尾。
注意:
_wexecl()
函数会阻塞当前进程,直到新进程退出为止。如果希望在不阻塞当前进程的情况下启动新进程,请使用_wspawnl()
或_wsystem()
函数。
1.3 运行结果
2. _wexecle
2.1 函数说明
int _wexecle(const wchar_t *path, const wchar_t *arg0, ... /*, const wchar_t *arg1, ..., NULL, wchar_t *const *envp */);
它是一个 Windows
平台下的 C
标准库函数,用于在新进程中执行指定的程序。与 _wexecl()
函数不同的是,_wexecle()
函数允许在新进程中指定环境变量
参数:
- path : 指向要执行的可执行文件的完整路径的字符串指针
- arg0 : 指向传递给新进程的第一个参数的字符串指针。该参数通常是要执行的程序的名称
- ... : 可变参数列表,包含传递给新进程的其他参数。必须以
NULL
结尾- envp : 指向新进程环境变量列表的指针。该列表是一个以
NULL
结尾的字符串数组,每个字符串都具有形式name=value
的格式
返回值:
- 如果
_wexecle()
函数返回-1
,则说明打开应用程序失败;- 否则,则表示成功打开。
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 <process.h>
#include <wchar.h>
int main()
{
// 设置新进程环境变量
wchar_t* env[] = {L"AUTHOR=Huazie", L"DATE=2023-03-28", NULL};
// 执行 SubEnvTest.exe
if (_wexecle(L"SubEnvTest.exe", L"SubEnvTest", L"Huazie", NULL, env) == -1)
{
printf("Error launching calculator.\n");
return 1;
}
return 0;
}
2.3 运行结果
3. _wexeclp
3.1 函数说明
int _wexeclp(const wchar_t *file, const wchar_t *arg0, ... /*, const wchar_t *arg1, ..., NULL */);
它是一个 Windows
平台下的 C
标准库函数,用于在新进程中执行指定的程序。与 _wexecl()
函数不同的是,_wexeclp()
函数允许通过环境变量设置 PATH
变量查找要执行的程序。
参数:
- file : 要执行的程序的名称或在
PATH
中可搜索的路径- arg0: 指向传递给新进程的第一个参数的字符串指针。该参数通常是要执行的程序的名称
- ... : 可变参数列表,包含传递给新进程的其他参数。必须以
NULL
结尾
返回值:
- 如果
_wexeclp()
函数返回-1
,则说明打开应用程序失败;- 否则,则表示成功打开。
3.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <wchar.h>
int main()
{
// 执行 java -version
if (_wexeclp(L"java.exe", L"java", L"-version", NULL) == -1)
{
printf("Error launching calculator.\n");
return 1;
}
return 0;
}
在上述的示例代码中,我们使用 _wexeclp()
函数执行 java -version
。其中,我们将程序的名称作为第一个参数,并在可变参数列表中以 NULL
结尾。由于系统会根据环境变量 PATH
的设置查找要执行的程序,因此我们不需要指定程序的完整路径。
注意:
_wexeclp()
函数会阻塞当前进程,直到新进程退出为止。如果希望在不阻塞当前进程的情况下启动新进程,请使用_wspawnlp()
或_wsystem()
函数。
3.3 运行结果
4. _wexeclpe
4.1 函数说明
int _wexeclpe(const wchar_t *file, const wchar_t *arg0, ... /*, const wchar_t *arg1, ..., NULL, wchar_t *const *envp */);
它是一个 Windows
平台下的 C 标准库函数,用于在新进程中执行指定的程序。与 _wexeclp()
函数不同的是,_wexeclpe()
函数允许通过环境变量设置 PATH
变量查找要执行的程序,并且还允许指定扩展名来确定要执行的程序
参数:
- file : 要执行的程序的名称或在
PATH
中可搜索的路径- arg0 : 指向传递给新进程的第一个参数的字符串指针。该参数通常是要执行的程序的名称
- ... : 可变参数列表,包含传递给新进程的其他参数。必须以
NULL
结尾- envp : 指向新进程环境变量列表的指针。该列表是一个以
NULL
结尾的字符串数组,每个字符串都具有形式name=value
的格式
返回值:
- 如果
_wexeclpe()
函数返回-1
,则说明打开应用程序失败;- 否则,则表示成功打开。
4.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <wchar.h>
int main()
{
// 设置新进程环境变量
wchar_t* env[] = {L"AUTHOR=Huazie", L"DATE=2023-05-16", NULL};
// 执行记事本应用
if (_wexeclpe(L"notepad", L"notepad", L"E:\\Software\\C\\Demo\\C\\test.txt", NULL, env) == -1)
{
printf("Error launching notepad.\n");
return 1;
}
return 0;
}
在上述的示例代码中,我们使用 _wexeclpe()
函数打开记事本应用,并指定要编辑的文件。其中,我们将程序的名称作为第一个参数,并在可变参数列表中以 NULL
结尾。同时我们还将指向新进程环境变量列表的指针作为最后一个参数传递给函数。
注意:
_wexeclpe()
函数会阻塞当前进程,直到新进程退出为止。如果希望在不阻塞当前进程的情况下启动新进程,请使用_wspawnlpe()
或_wsystem()
函数。
4.3 运行结果
5. _wexecv
5.1 函数说明
int _wexecv(const wchar_t *path, const wchar_t *const *argv);
它是一个 Windows
平台下的 C
标准库函数,用于在新进程中执行指定的程序。与 _wexecl()
和 _wexeclp()
函数不同的是,_wexecv()
函数使用字符串数组而不是可变参数列表来传递参数。
参数:
- path : 指向要执行的可执行文件的完整路径的字符串指针
- argv : 指向包含传递给新进程的所有参数的字符串数组的指针。必须以
NULL
结尾
返回值:
- 如果
_wexecv()
函数返回-1
,则说明打开应用程序失败;- 否则,则表示成功打开。
5.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <wchar.h>
int main()
{
// 设置新进程参数
const wchar_t* args[] = {L"calc", NULL};
// 执行计算器应用
if (_wexecv(L"C:\\Windows\\System32\\calc.exe", args) == -1)
{
printf("Error launching calculator.\n");
return 1;
}
return 0;
}
在上述的示例代码中,我们使用 _wexecv()
函数打开计算器应用,并设置新进程的参数。其中,我们将计算器应用的完整路径作为第一个参数,并将指向字符串数组的指针作为第二个参数传递给函数。
5.3 运行结果
6. _wexecve
6.1 函数说明
int _wexecve(const wchar_t *path, const wchar_t *const *argv, const wchar_t *const *envp);
它是一个 Windows
平台下的 C
标准库函数,用于在新进程中执行指定的程序,并且允许在新进程中设置环境变量。该函数与 _wexecv()
函数类似,不同之处在于 _wexecve() 函数允许指定新进程的环境变量
参数:
- path : 指向要执行的可执行文件的完整路径的字符串指针
- argv : 指向包含传递给新进程的所有参数的字符串数组的指针,必须以
NULL
结尾- envp : 指向新进程环境变量列表的指针。该列表是一个以
NULL
结尾的字符串数组,每个字符串都具有形式name=value
的格式
返回值:
- 如果
_wexecve()
函数返回-1
,则说明打开应用程序失败;- 否则,则表示成功打开。
6.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <wchar.h>
int main()
{
// 设置新进程参数
const wchar_t* args[] = {L"notepad", L"E:\\Software\\C\\Demo\\C\\test.txt", NULL};
// 设置新进程环境变量
const wchar_t* const env[] = {L"AUTHOR=Huazie", L"DATE=2023-05-16", NULL};
// 执行记事本应用
if (_wexecve(L"C:\\Windows\\System32\\notepad.exe", args, env) == -1)
{
printf("Error launching notepad.\n");
return 1;
}
return 0;
}
6.3 运行结果
7. _wexecvp
7.1 函数说明
int _wexecvp(const wchar_t *file, const wchar_t *const *argv);
它是一个 Windows
平台下的 C
标准库函数,用于在新进程中执行指定的程序,并且允许通过环境变量设置 PATH
变量查找要执行的程序。与 _wexeclp()
函数不同的是,_wexecvp()
函数使用字符串数组而不是可变参数列表来传递参数
参数:
- file : 要执行的程序的名称或在
PATH
中可搜索的路径- argv : 指向包含传递给新进程的所有参数的字符串数组的指针。必须以
NULL
结尾
7.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <wchar.h>
int main()
{
// 设置新进程参数
const wchar_t* args[] = {L"notepad", L"E:\\Software\\C\\Demo\\C\\test.txt", NULL};
// 执行记事本应用
if (_wexecvp(L"notepad.exe", args) == -1)
{
printf("Error launching notepad.\n");
return 1;
}
return 0;
}
7.3 运行结果
8. _wexecvpe
8.1 函数说明
Windows
平台下的 C
标准库函数,用于在新进程中执行指定的程序,并且允许通过环境变量设置 PATH
变量查找要执行的程序,同时还可以指定新进程的环境变量。该函数与 _wexecvp()
函数类似,不同之处在于 _wexecvpe()
函数允许指定新进程的环境变量
参数:
- file : 要执行的程序的名称或在
PATH
中可搜索的路径- argv : 指向包含传递给新进程的所有参数的字符串数组的指针。必须以
NULL
结尾- envp : 指向新进程环境变量列表的指针。该列表是一个以
NULL
结尾的字符串数组,每个字符串都具有形式name=value
的格式
8.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <wchar.h>
int main()
{
// 设置新进程参数
const wchar_t* args[] = {L"notepad", L"E:\\Software\\C\\Demo\\C\\test.txt", NULL};
// 设置新进程环境变量
const wchar_t* const env[] = {L"AUTHOR=Huazie", L"DATE=2023-05-16", NULL};
// 执行记事本应用
if (_wexecvpe(L"notepad.exe", args, env) == -1)
{
printf("Error launching notepad.\n");
return 1;
}
return 0;
}
8.3 运行结果
9. _wgetcwd
9.1 函数说明
wchar_t* _wgetcwd(wchar_t *buffer, int maxlen);
它是一个 Windows
平台下的 C
标准库函数,用于获取当前工作目录的路径
参数:
- buffer : 一个指向存储结果的缓冲区的指针
- maxlen : 缓冲区的大小(以字符数为单位)
9.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <direct.h>
#include <wchar.h>
#define MAX_PATH 200
int main()
{
wchar_t buffer[MAX_PATH];
// 获取当前目录
if (_wgetcwd(buffer, MAX_PATH) == NULL)
{
printf("Error getting current working directory.\n");
return 1;
}
wprintf(L"Current working directory: %ls\n", buffer);
return 0;
}
在上述的示例代码中,
- 首先,我们定义一个
wchar_t
类型的缓冲区buffer
,并将其大小设置为MAX_PATH
; - 然后,我们调用
_wgetcwd()
函数,并将指向缓冲区的指针和缓冲区大小作为参数传递给函数。 - 接着判断
_wgetcwd()
函数调用结果是否为NULL
;- 如果为
NULL
,说明调用失败,则输出一条错误消息并返回1
,程序异常结束; - 如果不为
NULL
,说明调用成功,输出当前工作目录的绝对路径。
- 如果为
- 最后返回
0
,程序正常结束。
9.3 运行结果
10. _wgetdcwd
10.1 函数说明
wchar_t* _wgetdcwd(int drive, wchar_t *buffer, int maxlen);
它是一个 Windows
平台下的 C
标准库函数,用于获取指定驱动器的当前工作目录的路径
参数:
- drive : 要检索其当前目录的驱动器号(1 表示 A:盘,2 表示 B:盘,依此类推)
- buffer : 一个指向存储结果的缓冲区的指针
- maxlen : 缓冲区的大小(以字符数为单位)
10.2 演示示例
#include <stdio.h>
#include <stdlib.h>
#include <direct.h>
#include <wchar.h>
#define MAX_PATH 200
int main()
{
wchar_t buffer[MAX_PATH];
// 获取 C:盘的当前工作目录
if (_wgetdcwd(3, buffer, MAX_PATH) == NULL)
{
printf("Error getting current working directory of drive C.\n");
return 1;
}
wprintf(L"Current working directory of C: %ls\n", buffer);
return 0;
}