我正在努力接受一个参数名称并将其传递给我所做的程序。我编写了C代码(copy.c),它接受文件名并在Linux控制台终端中打印出来。简单地说,当我这样做时,它就工作了:
./copy filename.txt
运行良好,与cat生成的结果相同。
但是,当我输入:
./copy < filename.txt
所以我认为"<"一定是打断了复制,以接受下一个参数,即实际的文件名。我试图绕过它,首先让主接受"<将">
有办法绕过这个吗?如果是"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 %snn", argv[0], argv[1]); //check for the argument names
return 0;
}
当我这样做的时候。/copy 123 filename.txt":
123 filename.txt
出现。
但是当我这样做的时候。/复制& lt;filename.txt "
(null) XDG_SESSION_ID=2231
出来。请帮我把整个程序接受"<文件名。txt"作为第一个参数,或者绕过这个>
我在linux上使用GNU库进行C编程。
shell解释:
./copy < filename.txt
并将<
和filename.txt
作为指令来设置命名文件的标准输入,而这些不会作为参数传递给程序。因此,此调用运行./copy
时没有额外的参数(并且使用来自文件而不是终端的标准输入)。
如果您希望将<
作为参数传递(以及文件名),请引用它:
./copy '<' filename.txt
./copy "<" filename.txt
./copy < filename.txt
如果文件名中有空格,也需要加上引号