从命令行开始?

cat*_*eof 1 c c++ linux

我有一个在Linux系统上运行的简单C/CPP进程.这是a.out.

另一个进程能够在其代码中启动a.out.这是b.out.

在a.out中我需要什么代码才能理解它是从命令行执行的?例如./a.out

有没有办法知道它是从cmd开始还是从另一个进程启动?

Fre*_*Foo 6

您无法一般性地查找程序是否"从命令行"(通过用户的显式命令)启动,但您可以查看其标准输入和输出是否与终端/命令窗口通信:

#include <unistd.h>
isatty(fileno(stdin))
Run Code Online (Sandbox Code Playgroud)

stdout返回标准输入/标准输出是否为端子.

如果您需要知道启动程序的进程,请使用getppid系统调用获取父进程ID(ppid),然后读取伪文件/proc/ppid/cmdline.

  • 如果使用isatty,则在命令行中重定向会出错.作为一个用户,我会被一个我无法在管道中使用的命令所困扰...... (2认同)
  • 我使用的`ls`的所有实现都尝试在从终端调用时将文件名放入列中,但在管道输出时每行有一个文件. (2认同)