linux 程序中打印Usage

本文介绍了一个简单的C程序示例,展示了如何使用命令行参数来控制程序的行为。程序根据传入的参数数量判断是否符合预期,并给出相应的提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

int main(int argc, char **argv)
{

        if (argc != 3) {
                fprintf(stderr, "Usage: %s {i4|i6|<num>} string\n", argv[0]);
                exit(EXIT_FAILURE);
        }

        return 0;
}

以下是在Linux打印进程树的完整代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <dirent.h> #include <sys/types.h> #include <sys/stat.h> #define MAX_PID_LEN 10 #define MAX_PATH_LEN 100 void print_tree(char *pid, int level); int main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s <pid>\n", argv[0]); return -1; } print_tree(argv[1], 0); return 0; } void print_tree(char *pid, int level) { DIR *dir; struct dirent *entry; char path[MAX_PATH_LEN]; char new_pid[MAX_PID_LEN]; struct stat statbuf; int i; if (level == 0) { printf("%s\n", pid); } sprintf(path, "/proc/%s/task", pid); if ((dir = opendir(path)) == NULL) { return; } while ((entry = readdir(dir)) != NULL) { if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; } sprintf(path, "/proc/%s/task/%s", pid, entry->d_name); if (lstat(path, &statbuf) < 0) { continue; } if (S_ISDIR(statbuf.st_mode)) { for (i = 0; i < level + 1; i++) { printf("| "); } printf("|-- "); printf("%s\n", entry->d_name); strncpy(new_pid, entry->d_name, MAX_PID_LEN); print_tree(new_pid, level + 1); } } closedir(dir); } ``` 该程序的主要思路是通过读取 `/proc` 目录下的进程信息来构建进程树。首先,程序接受一个进程 PID 作为命令行参数,并将其作为根节点打印出来。然后,程序遍历 `/proc/<pid>/task` 目录下的所有子目录,如果子目录是以数字命名的目录,就将其作为一个子节点打印出来,并递归打印其子节点。在打印子节点时,程序会在前面加上一些空格,以形成树状结构。 需要注意的是,程序中使用了 `lstat()` 函数来获取文件的元数据。这是因为 `/proc` 目录下的很多文件都是符号链接,如果直接使用 `stat()` 函数获取文件信息,会返回符号链接本身的信息,而不是链接指向的文件的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值