c - 在 c 的 main 中传递参数

标签 c linux arguments program-entry-point

我正在努力接受参数名称并将其传递给我制作的程序。我制作了 C 代码 (copy.c),它接收文件名并在 Linux 控制台终端中打印出来。简单地说,当我这样做时它会起作用:

./copy filename.txt

这工作正常,与 cat 产生的结果相同。

但是,当我输入时却没有:

./copy < filename.txt

所以我认为“<”必须中断复制以接受下一个参数,即实际文件名。我试图通过首先让 main 将“ 来解决这个问题

有什么办法可以解决这个问题吗?如果它是“123 filename.txt”,这有效。

这是我的副本.c:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//#include <string.h>
#define bufferSize 200

int main(int argc, char* argv[])
{
    char buffer[bufferSize];
    int fd;
    int argu_no = 1;

    printf("%s %s\n\n", argv[0], argv[1]); //check for the argument names
    return 0;
}

当我执行“./copy 123 filename.txt”时:

123 filename.txt

出现。

但是当我执行“./copy < filename.txt”

(null) XDG_SESSION_ID=2231

出来了。请帮助我的程序接受整个“< filename.txt”作为第一个参数或解决这个问题。

我在 Linux 上使用 GNU 库进行 C 编程。

最佳答案

shell 解释:

./copy < filename.txt

并处理 <filename.txt作为将标准输入设置为指定文件的指令,这些指令不会作为参数传递给您的程序。所以这个调用运行 ./copy没有额外的参数(并且标准输入来自文件而不是您的终端)。

如果你想要 <作为参数传递(以及文件名),引用它:

./copy '<' filename.txt
./copy "<" filename.txt
./copy \<  filename.txt

如果文件名中有空格,也需要用引号引起来。

关于c - 在 c 的 main 中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39176916/

相关文章:

c++ - 如何从 mysql c 库转储 MySQL 数据库

带有提示的 Linux 命令行问题

使用linux终端编译问题

c# - 在 C# 中将 IEnumerable 作为参数传递,为什么这是正确的语法?这是什么意思?

c - 保存并重新启动它停止的循环

c - 理解汇编递归函数

linux - 使用 rsync 将在线新文件同步到远程 ntfs 驱动器的哪些选项?

c++ - 带参数和数组的对象

ruby-on-rails - 如何调试 Rails 错误中参数数量错误(1 代表 0)?

c++ - 可移植基于文本的控制台操纵器