使用“ - ”启动文件而不与标志冲突

时间:2016-04-03 22:58:47

标签: c unix

我正在尝试在C中复制“ls”命令。它应该占用0到2个参数之间的任何值,即文件路径和一组标志。当传递1个参数时,我试图区分传递文件和传递一组标志 - 我认为显而易见的方法是假设没有文件名以“ - ”字符开头,因此,如果参数的第一个字符是“ - ”,则将其视为一组标志,否则将其视为文件路径。

我该如何区分这两者?

2 个答案:

答案 0 :(得分:2)

嗯,ls的规则是 - 考虑int是一个文件:

  • -als -a被视为选项参数;
  • -als -- -a被视为文件参数

-a参数被视为分隔符,之后所有参数都是文件,而不是选项。

答案 1 :(得分:2)

通常,程序,并留给用户处理由此产生的问题。

例如,创建一个名为MySQLdb.connect()的文件和至少一个其他文件,然后运行-l

ls *

me@localhost:~$ mkdir temp me@localhost:~$ cd temp me@localhost:~/temp$ touch ./-l me@localhost:~/temp$ touch testfile me@localhost:~/temp$ ls * -rw-rw-r-- 1 acampbell acampbell 0 Apr 4 11:00 testfile me@localhost:~/temp$ 已扩展为ls *

大多数Unix实用程序可以接受参数 - 并且ls -l testfile之后的每个参数都将被视为文件名:

--

他们还可以指定不以me@localhost:~/temp$ ls -l -- testfile -rw-rw-r-- 1 acampbell acampbell 0 Apr 4 11:00 testfile me@localhost:~/temp$ ls -- -l testfile -l testfile me@localhost:~/temp$ 开头的路径,例如使用冗余-

./