2013-11-20 9 views
0

저는 3 개의 정수를 인수로 취하는 작은 C 프로그램을 작성했습니다. 나는이처럼 실행하고있는 경우 : myapp 1 2 3 실행 잘, argc 올바르게 4를 보여 주지만, 내가 할 경우 : echo 1 2 3 | myapp를,는 argc는C 프로그램에 여러 개의 인수 전달

C 코드의 관련 부분은 단지 1입니다 보여줍니다

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc, char **argv) 
{ 
printf("Entered: %i\n", argc); 
if (argc < 4) 
{ 
printf("You must enter 3 integers as command line arguments!\n"); 
exit(1); 
} 
} 

무엇 이거 잘못 됐어?

답변

3

파이프는 첫 번째 프로세스의 출력을 두 번째 프로세스의 stdin으로 전달합니다.이 프로세스는 명령 줄 인수와는 아무런 관련이 없습니다. 당신이 원하는 것은 첫 번째 프로세스의 출력을 사용하여 명령 행 인수로 사용하는 xargs입니다 :

echo 1 2 3 | xargs myapp 
+0

그래, 나는 피곤, 나는 xargs를 잊었습니다 ... 감사합니다! :) 나는 당신이 대답을 최대한 빨리 받아 들일 것입니다. – Frantique

4

echo 1 2 3 | myapp은 인수없이 호출됩니다. 값은 stdin을 통해 전달됩니다.

당신은 (유닉스에서 떠들썩한 파티를 사용하는 경우) 대신 사용할 수도 있습니다

myapp `echo 1 2 3` 

또는,라는 파일 numbers.txt의 번호 목록이있는 경우, 당신은뿐만 아니라이 작업을 수행 할 수 있습니다

myapp `cat numbers.txt` 
0

echo 1 2 3 | myapp은 프로그램의 표준 입력에 1을 보낼 것입니다. 프로그램에서 읽지 않으면 해당 번호가 표시되지 않습니다. 이 기능을 사용하려면 예를 들어 scanf을 사용해야합니다. 이 방법으로 전달 된 '인수'의 수를 계산하려면 문자열을 직접 파싱해야합니다.