stdin, stdout, stderr 에대하여 문의드립니다.

antz의 이미지

일반적인 리눅스 환경에서 gcc에 대해서 문의드립니다.

1. 프로그램에 기본적으로,
stdin, stdout, stderr 가 file descriptor가 0,1,2로 open 되있는게
맞나요?

1-1. 아니면, stdin, stdout, stderr를 쓰기 위해 선언이 필요한가요???

2. stdin, stdout, stderr가 선언되있다가 close될수 있나요?
파일의 갯수 제한이나 어떤 경우에 stdin, stdout,stderr가
close 될 수 있나요???

2-2. stdin, stdout, stderr가 close 될 수 있다면,
close 되지 않게 할 수 있나요?

3. 무한루프에서 파일 입출력이 많은경우.
scanf 문이 무시될수 있게 stdin이 close 될 수 있나요?

3-3. scanf가 무시될경우 해결 방법은 어떤건가요?

답변 부탁드립니다.
감사합니다.

goodfiend의 이미지

mollla wrote:
일반적인 리눅스 환경에서 gcc에 대해서 문의드립니다.

1. 프로그램에 기본적으로,
stdin, stdout, stderr 가 file descriptor가 0,1,2로 open 되있는게
맞나요?

1-1. 아니면, stdin, stdout, stderr를 쓰기 위해 선언이 필요한가요???


일반적인 환경에서 file descripter 0, 1, 2는 그렇게 예약되어 있습니다.

mollla wrote:
2. stdin, stdout, stderr가 선언되있다가 close될수 있나요?
파일의 갯수 제한이나 어떤 경우에 stdin, stdout,stderr가
close 될 수 있나요???

2-2. stdin, stdout, stderr가 close 될 수 있다면,
close 되지 않게 할 수 있나요?


시스템 콜을 이용하여 stdin, stdout, stderr등도 다른 file descripter와 마찬가지로 close 할 수 있습니다. 파이프로 IPC할때 그럴 필요가 많이 있지요. close되지 않게 한다는 것은 무슨뜻인지 잘 모르겠네요.. 자신의 프로세스의 file descripter를 열고 닫고는 자기 맘 아닌가요.. (제가 문제 이해를 잘못했나요... -_-a)

mollla wrote:
3. 무한루프에서 파일 입출력이 많은경우.
scanf 문이 무시될수 있게 stdin이 close 될 수 있나요?

3-3. scanf가 무시될경우 해결 방법은 어떤건가요?


이것은 보다 로우레벨에서의 문제인거 같은데요.. stream크기 이상의 데이터가 들어올때 어떻게 처리하도록 되어있는지 알아봐야 합니다. 저도 scanf의 구현을 직접본적이 없어서 모릅니다. 이것은 직접 scanf의 코드를 보셔서 정확한 문제점과 해결방안을 생각해보시는것이 좋을듯 합니다. 다른 분들의 구체적인 도움이나 문서가 없으면 빡시겠네요..;
purewell의 이미지

fclose(stdin);
fclose(stdout);

서버쪽 프로그래밍인가? 거기서 보안을 위해
표준 입/출력을 닫아버린다고 합니다.

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

antz의 이미지

답변 감사드립니다.
명확하지 않았던것이 해소되는것 같네요.

다음은 코드중에 에러가 나는 부분 입니다.

while(1)
{
     ... 중략 ...
	printf("===============================================================\n");
	printf("Enter Command : ");
	sleep(1);
	nRet = scanf("%s", pTemp);getchar();
	if (nRet < 0)
	{
#ifdef debug
	    printf("\n>>> nRet = %d, pTemp = [%s], ERROR : [%s]\n", nRet, pTemp, strerror(errno));
#endif
	    break;
	}
    ... 중략 ...
}

다음은 프로그램 실행결과 입니다.

Quote:
===============================================================
Enter Command :
>>> nRet = -1, pTemp = [], ERROR : [Bad file descriptor]

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.