我的程序执行如下:
$./sort 1 < test.txt
sort是程序名称
1是参数(argv [1])
和test.txt是我从
输入的文件是否可以从中提取名称文件?如果是这样的话? 问题是我已经编写了整个程序,好像我可以从输入行中提取名称,所以我需要能够将它传递给参数。
感谢任何帮助, 谢谢!
答案 0 :(得分:3)
你做不到。 shell打开(open(2)
)该文件并设置重定向(最有可能使用dup2)。
唯一可行的方法是让shell在您可以通过getenv
读取的环境变量中显式导出信息。
但它并不总是有意义的。例如,您希望从哪个文件名
$ echo "This is the end" | ./sort 1
答案 1 :(得分:2)
虽然这不能轻松完成,但可以通过/proc/self/fd/0
(或/proc/some_pid/fd/0
)上的readlink
来调用Linux。
例如,跑步:
echo $(readlink /proc/self/fd/0 < /dev/null)
输出:
/dev/null
答案 2 :(得分:0)
不,你不能:shell将test.txt的内容发送到你程序的标准输入。
看看这个:
sort << _EOF
3
1
2
_EOF
&lt; &GT; |运算符由shell处理,它们改变cmd行中程序的标准输入,输出和错误。
答案 3 :(得分:0)
如果您碰巧运行Solaris,则可以解析pfiles输出以使用stdin获取与之关联的文件(如果有)。
$ /usr/bin/sleep 3600 < /tmp/foo &
[1] 8430
$ pfiles 8430
8430: /usr/bin/sleep 3600
Current rlimit: 65536 file descriptors
0: S_IFREG mode:0600 dev:299,2 ino:36867886 uid:12345 gid:67890 size=123
O_RDONLY|O_LARGEFILE
/tmp/foo
1: S_IFCHR mode:0600 dev:295,0 ino:12569206 uid:12345 gid:67890 rdev:24,2
...
在大多数Unix平台上,如果安装了此免费软件,您还可以从lsof -p
获取相同的信息。