[완료] C 프로그램 기술에 관한 질문..

Long_run의 이미지

리눅스 기반의 C프로그램을 짜고 있습니다..

어떤 프로그램을 while(1) 문을 사용해서 돌립니다..
이 while문은 1회 반복에 recvcnt를 1씩 증가시킵니다..(무한 루프)
여기서 질문이 있습니다..

1. 저는 while문을 프로그램 도중 특정 커맨드를 이용해서 빠져 나오고 싶습니다.
2. 빠져나오는 순간의 recvcnt 값을 보여주거나, 파일에 기록하고 프로그램을 종료하고 싶습니다.

기술적으로 이런 것을 할 수 있는 방법이 있나요? 혹은 어떤 키워드로 정보를 찾아봐야 하나요~
추가적으로는 모색할 수 있는 방안이 있는지.. 부탁드리겠습니다..^^

powersys의 이미지

fprintf()

Long_run의 이미지

항상 recvcnt를 파일에 기록하라는 말씀이신거 같은데 맞나요?
제가 질문에 적지 않아서 그런것 같은데 항상 저장하는 것은 아니고요..
종료시 그 순간의 값만 보여주거나 저장하기 위함입니다 ㅎㅎ

만약 알려주신대로 하면..
차선책은 종료전까지 모든 값을 기록하고 있다가
프로그램이 종료되면 마지막 값만 남기고
그 전 데이터를 모두 지우는 방법을 택해야 하는 걸까요..ㅎㅎ

int main(){
do(Anything);
your(Everthing);
best(Everytime);
}

tachyon92의 이미지

아마 명령을 입력받는 동안 루프를 계속 돌리려고 하나요?

recvcnt는 무엇을 세기 위한 거죠?

Long_run의 이미지

질문에서 보다시피 어떠한 명령(커맨드)로 무한 반복문이 종료가 될 시..

프로그램이 그냥 종료되지 않고..

종료할때까지 증가시킨 recvcnt 값을 보여주거나 저장하는 것 입니다 ㅎㅎ

int main(){
do(Anything);
your(Everthing);
best(Everytime);
}

tachyon92의 이미지

그거라면 윗분 답대로 fprintf(), printf()를 쓰면 됩니다.
라고 생각합니다.

Long_run의 이미지

무한 반복문 종료는 어떤식으로 해야할까요?
특정 조건도 없는 while(1) 반복문에서요..ㅎㅎ

제 말은 fprintf() 나 printf()는 종료를 위한
수단은 아니라고 생각이 되서요...ㅎㅎ

int main(){
do(Anything);
your(Everthing);
best(Everytime);
}

tachyon92의 이미지

break;

Long_run의 이미지

while(1){
recvcnt++;
}

이 상태에서 break; 라는
코드를 넣으려면 중간에 조건을 넣어야 하는데..
예를 들면 if(recvcnt == n) 같은..

제가 질문을 좀 상세히 안한 것 같긴한데..ㅠ ㅠㅎㅎ;

그럼 다시 질문드리는게 무한 루프문은
루프문 내에 조건문과 break; 문이 없이는 빠져나올 수 없는거죠?

제가 말한 특정 명령(커맨드)라는 것은..
좀 뜬금없지만 무한반복문이 돌고있는 도중에 어떤 키를 입력한다거나해서..
Ctrl+C 처럼 프로그램을 종료시키는 것이거든요..ㅎㅎ

int main(){
do(Anything);
your(Everthing);
best(Everytime);
}

tachyon92의 이미지

그 외에는 goto문 없이는 불가능합니다.

조건을 체크하는 부분에서 Ctrl+C 눌렸는지 확인하거나, 별도의 스레드에서 키입력을 받을 수도 있겠지만, 프로그램 종료 전에 루프를 빠져나가려면 break 문을 써야 합니다.

Long_run의 이미지

잘 알겠습니다 일단 입력체크 부분과 스레드에서 좀 더 검색해보고
시도해봐야 겠네요 감사합니다^^

int main(){
do(Anything);
your(Everthing);
best(Everytime);
}

tachyon92의 이미지

혹은

while (...) //조건체크
하셔도 됩니다.

ymir의 이미지

while loop 를 thread 로 돌리고, main 에서는 키입력 대기, 키입력 검사해서, while loop 의 탈출 조건을 주건 애가 빠져나오겠죵.
while 빠져나오면 바로 recvcnt 출력해주고..

thread 없이 단일 loop 에서라면 select 로 stdin 을 모니터링 해서 입력된 문자열을 비교하면 될테고..

꼭 명령어가 아니어도 된다면, signal handler 등록해서 while loop 의 탈출 조건을 줘도 되겠네요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

Long_run의 이미지

스레드와 키입력 검사 부분에서의 키워드를 언급해주신 부분 감사드려요!!

알려주신 정보로 좀 더 공부해보도록 하겠습니다 감사합니다~!

int main(){
do(Anything);
your(Everthing);
best(Everytime);
}

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.