06.06 用 /proc/self/cmdline 获取命令行参数

/proc/self/cmdline 是一个以 \0 结尾的文件,我尝试过用 fgets 读取,但是失败了;转而使用 fgetc 逐字符读文件。

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main() {
    FILE *f = fopen("/proc/self/cmdline", "r");
    if (!f) {
        perror("fopen");
        return 1;
    }
    
    int i = 0, j = 0;
    int ch;
    char buf[128];
    while ((ch = fgetc(f)) != EOF) {
        if (ch == '\0') {
            buf[j] = '\0';
            printf("argv[%d]: %s\n", i++, buf);
            j = 0;
        } else {
            buf[j++] = ch;
        }
    }

    fclose(f);
}

例子:

(py310) xxx /data/apue $ /data/apue/build/apue 5 265
argv[0]: /data/apue/build/apue
argv[1]: 5
argv[2]: 265