리눅스 bash 쉘에서 argv 로 널문자 입력이 가능한가요?

declspec의 이미지

리눅스에서 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) 를 전달할 수 있을까요??

ghostyak의 이미지

파이프를 써보세용. read() 함수로 읽기 때문에 가능할 것 같아 보입니다.

이런 모양이 되겠죠...

shell$perl -e 'print"abcd\x00efgh"' | a

http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/pipe

1000

ghostyak의 이미지

답글을 잘 못 달았네요. 죄송합니다.
pipe()함수는 잘 못 적은것이구요.
리눅스 쉘에서 사용하는 파이프라인을 이야기 한 것이었습니다.
파이프라인을 사용하면 표준출력(stdout) 을 표준입력(stdin)으로 받아서 처리할 수 있습니다.

1000

declspec의 이미지

그렇다면 표준 입출력으로 주는것말고 쉘상에서 argument 로 주는건 방법이 없는건가요 ㅠㅠ

자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.

bootmeta의 이미지