리눅스 bash 쉘에서 argv 로 널문자 입력이 가능한가요?
글쓴이: declspec / 작성시간: 화, 2012/03/27 - 4:32오후
리눅스에서 C 로짠 프로그램 a 가 아래와 같을때
#include
int main(int argc, char* argv[]){
int i;
for(i=0; i<10; i++) printf("%02x\n", argv[1][i]);
return 0;
}
아래와 같이 쉘에서 명령을 수행하면 그 결과가 어떻게 나올까요?
shell$./a `perl -e 'print"abcd\x00efgh"'`
a
b
c
d
e
f
g
h
이렇게 나올거로 예상되지만 실제로는
a
b
c
d
e
f
g
h
이렇게 나옵니다
즉 널문자를 입력하려했던게 무시됩니다.
어떻게하면 argv 에 널문자(아스키코드 0) 를 전달할 수 있을까요??
Forums:
파이프를 써보세용. read() 함수로 읽기 때문에
파이프를 써보세용. read() 함수로 읽기 때문에 가능할 것 같아 보입니다.
이런 모양이 되겠죠...
shell$perl -e 'print"abcd\x00efgh"' | a
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/pipe
1000
답글을 잘 못 달았네요.
답글을 잘 못 달았네요. 죄송합니다.
pipe()함수는 잘 못 적은것이구요.
리눅스 쉘에서 사용하는 파이프라인을 이야기 한 것이었습니다.
파이프라인을 사용하면 표준출력(stdout) 을 표준입력(stdin)으로 받아서 처리할 수 있습니다.
1000
감사합니다
그렇다면 표준 입출력으로 주는것말고 쉘상에서 argument 로 주는건 방법이 없는건가요 ㅠㅠ
자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.
C에선 아니되옵니다.
http://stackoverflow.com/questions/2283335/how-to-pass-in-a-null-character-in-a-command-line-argument-in-c
더 나아가 shell variable에서도 아니되옵니다.(C를 기반으로한 api이므로)
http://crasseux.com/books/ctutorial/Environment-variables.html
댓글 달기