我正在努力接受参数名称并将其传递给我制作的程序。我制作了 C 代码 (copy.c),它接收文件名并在 Linux 控制台终端中打印出来。简单地说,当我这样做时它会起作用:
./copy filename.txt
这工作正常,与 cat 产生的结果相同。
但是,当我输入时却没有:
./copy < filename.txt
所以我认为“<”必须中断复制以接受下一个参数,即实际文件名。我试图通过首先让 main 将“ 有什么办法可以解决这个问题吗?如果它是“123 filename.txt”,这有效。 这是我的副本.c: 当我执行“./copy 123 filename.txt”时: 出现。 但是当我执行“./copy < filename.txt” 出来了。请帮助我的程序接受整个“< filename.txt”作为第一个参数或解决这个问题。 我在 Linux 上使用 GNU 库进行 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;
}
123 filename.txt
(null) XDG_SESSION_ID=2231
最佳答案
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/