在为 Linux 编写代码时,我遇到了与如何处理命令行参数相关的问题。操作系统似乎负责将参数作为单独的 C 字符串放置。但是,我希望接收完整的输入缓冲区以进行手动解析。这可能吗?如果可以,我该如何实现?
我很惊讶没有标准化的方法来做到这一点, 但我愿意尽可能更改内核以使其正常工作,所以请任何答案都有帮助。
我什至在网上寻找如何通过系统调用检索未触及的命令行输入,但最终您只能访问 argc 和 argv,这意味着即使在该级别它也已经被解析了...
您可以从 /proc/self/cmdline 读取完整的命令行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CMDLINE_BUF_SIZE 256
int main() {
FILE *fp;
char cmdline[CMDLINE_BUF_SIZE];
// Open the /proc/self/cmdline file for reading
fp = fopen("/proc/self/cmdline", "r");
if (fp == NULL) {
perror("Failed to open /proc/self/cmdline");
exit(EXIT_FAILURE);
}
// Read the contents of the file into the cmdline buffer
if (fgets(cmdline, CMDLINE_BUF_SIZE, fp) == NULL) {
perror("Failed to read /proc/self/cmdline");
exit(EXIT_FAILURE);
}
// Print the contents of the cmdline buffer to stdout
printf("%s\n", cmdline);
// Close the file
fclose(fp);
return 0;
}