我希望能够将进程的 argv 和 environ 保存到文件中,并且稍后能够 fork
和 exec
使用保存到文件的参数。
我唯一能想到的设计是将参数列表作为一个长字符串写入文件,但随后我需要将其从字符串转换为字符串数组,这是可能的但非常麻烦。
有谁能想到更好的方法吗?
最佳答案
我对文件格式的建议
- 第一行是一个十进制数N,等于
argc
- 接下来N行是
argv
字符串,每行一个字符串 - 然后还有一个十进制数M,等于环境字符串的个数
- 接下来M行是环境字符串,每行一个字符串
将文件读回内存
- 用
getline
读取第一行,用sscanf
转换数字 malloc
N+1 指针数组- 使用
getline
读取接下来的N行,将指针存储在argv
数组中 - 在
argv
数组的末尾放置一个NULL 指针 - 使用
getline
读取下一行并使用sscanf
转换数字 malloc
M+1 指针数组- 使用
getline
读取接下来的M行,将指针存储在env
数组中 - 在
env
数组的末尾放置一个 NULL 指针
使用getline
时需要注意两点。首先,它会自动malloc
字符串的内存。其次,它将换行符放在字符串的末尾,因此您必须将其删除。
使用 getline
读取 argv
字符串的示例代码
int N = 5;
char **argv = malloc( (N + 1) * sizeof(char *) );
char *line;
size_t linecap, length;
for ( int i = 0; i < N; i++ )
{
line = NULL; // request that getline allocate memory
linecap = 0;
if ( (length = getline( &line, &linecap, fp )) <= 0 )
exit( 1 ); // file ended prematurely
line[length-1] = '\0'; // get rid of the pesky newline
argv[i] = line;
}
argv[N] = NULL;
关于c - 如何有效地从文件中读取环境参数,与 exec 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27578653/