Linux 中命令行参数是由操作系统而不是程序本身解析的?

问题描述 投票:0回答:1

在为 Linux 编写代码时,我遇到了与如何处理命令行参数相关的问题。操作系统似乎负责将参数作为单独的 C 字符串放置。但是,我希望接收完整的输入缓冲区以进行手动解析。这可能吗?如果可以,我该如何实现?

我很惊讶没有标准化的方法来做到这一点, 但我愿意尽可能更改内核以使其正常工作,所以请任何答案都有帮助。

我什至在网上寻找如何通过系统调用检索未触及的命令行输入,但最终您只能访问 argc 和 argv,这意味着即使在该级别它也已经被解析了...

c linux linux-kernel posix command-line-arguments
1个回答
0
投票

您可以从 /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;
}
© www.soinside.com 2019 - 2024. All rights reserved.