Я борюсь с принятием имени аргумента и передачей его вместе с программой, которую я создал. Я сделал C-код (copy.c), который принимает имя файла и печатает на консольном терминале Linux. Если говорить легко, это работает, когда я это делаю:Передача аргументов в main в c
./copy filename.txt
Это прекрасно работает, как и кошка.
Однако, это не когда я ставлю:
./copy < filename.txt
Так я понял, что «<» должен прерывать копию, чтобы взять в следующем аргументе, который является фактическим именем файла. Я пытался обойти это, сначала сделав основной, чтобы принять «< filename.txt» до первого аргумента в целом, а затем изменить его на «filename.txt»
Есть ли способ обойти это? Если это «123 filename.txt», это работает.
Вот мой copy.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» в качестве первого аргумента или обойти это.
Я использую библиотеку GNU для Linux для программирования на языке C.
'./copy" <"filename.txt" ' –
Я пытаюсь сделать copy.c для принятия аргумента, который не начинается с двойных кавычек, как вы предложили. –
Кавычки не будут переданы в аргументы. Если вы хотите явно передать кавычки, вам придется избегать их с обратной косой чертой. –