[질문] 리눅스 고수님들 ... 저좀 살려주십시오

youdotan의 이미지

#include "stdio.h"
#include "string.h" // >,< 얘네를 이용하면 태그처리가 되네요

int main (void)
{
FILE *ip, *op;
char c;
char buffer[255] = "=========================================\n";
char buffer2[255];
char line[6][255];
char temp[6][255];

ip = fopen("dmesg.txt", "rt");
op = fopen("result.txt", "w");

while(fgets(buffer2, 255, ip) != NULL)
{
printf("read : %s\n", buffer2);
if(strcmp(buffer, buffer2) == 0)
{
break;
}
}

printf("end\n");

strcpy(line[0], buffer2);
fgets(line[1], 255, ip);
fgets(line[2], 255, ip);
fgets(line[3], 255, ip);
fgets(line[4], 255, ip);
fgets(line[5], 255, ip);

printf("%s%s%s%s%s%s", line[0], line[1], line[2], line[3], line[4], line[5]);

while(1)
{
if(fgets(temp[0], 255, ip) != NULL)
{
printf("temp[0] : %s", temp[0]);
if(strcmp(temp[0], buffer) == 0)
{
fgets(temp[1], 255, ip);
fgets(temp[2], 255, ip);
fgets(temp[3], 255, ip);
fgets(temp[4], 255, ip);
fgets(temp[5], 255, ip);

if(strcmp(temp[5], buffer) == 0)
{
strcpy(line[0], temp[0]);
strcpy(line[1], temp[1]);
strcpy(line[2], temp[2]);
strcpy(line[3], temp[3]);
strcpy(line[4], temp[4]);
strcpy(line[5], temp[5]);
}
else
continue;
}
else
continue;
}
else
break;
}

printf("\n%s%s%s%s%s%s", line[0], line[1], line[2], line[3], line[4], line[5]);
fprintf(op, "%s%s%s%s%s%s", line[0], line[1], line[2], line[3], line[4], line[5]);

fclose (ip);
fclose (op);

return 0;
}

dmesg.txt 파일의 '=========================================\n'라는 라인을 찾으면
그 밑의 6번째 줄까지 result.txt라는 파일로 출력을 해주는 훌륭한 c파일입니다.
제가 만들었죠 ㅎㅎ
만드느라 죽는 줄 알았는데....
문제는 이 아이가

윈도우에서는 원하는대로 되지만.. 리눅스에서는 돌아가지 않는다는 점입니다.

혹시 위의 c파일 원본에 리눅스에서는 잘 돌아가지 않을 만한 이유가 되는 부분을 찾아주시면 감사하겠습니다.
윈도우에서는 원하는 결과가 나옵니다...

에러가 뜨지는 않습니다만 while(1)안에 있는 내용을 일체 수행하지 않습니다.

input file인 dmesg.txt를 첨부합니다.
위의 내용을 복사하셔서 컴파일 하면 첨부파일을 이용해 result.txt를 출력합니다.(윈도우에서만)

살려주세요..
이거 내일까지 못하면 여러 사람이 다칩니다...ㅜ
오버해서 미안하구요
단서라도 좋으니 답변 좀 부탁드리겠습니다.

File attachments: 
첨부파일 크기
Plain text icon dmesg.txt12.47 KB
auditory의 이미지


원하시는 답변이 아니라 죄송하지만,,

코드는 코드블럭 안에 넣어주시고요..
간단한 디버깅 방법을 익히시면 쉽게 해결할 수 있을거 같고요..
"=============\n" 을 좀 간단히 하시면 어떨까 싶고요..

리눅스에서라면

grep -A 6 ========== dmesg.txt > result.txt 

를 하시면 더 좋을거 같고요..
baboda4u의 이미지

우선....첫번째 #include 뒤에 아무 헤더파일이 없는 것이 일단 인상적이구요....

그다음은 ip = fopen("dmesg.txt", "rt"); 열고자 하는 경로에 dmseg.txt파일이 있는지 확인 해보세요...

그리고 간단한 디버그 프린트문 넣어서 어느 라인에서 막히는지 테스트 해보심 될듯하네요

============================
Stay Hungry, Stay Foolish

============================
Stay Hungry, Stay Foolish

onion의 이미지

헤더파일명이 없는건...

꺽쇠괄호를 kldp에서 html 태그로 인식해버린 결과가 아닐까...합니다...-.-;

-----새벽녘의 흡혈양파-----

-----새벽녘의 흡혈양파-----

youdotan의 이미지

다시 질문 보니 include 뒤에 아무것도 없네요.. stdio.h, string.h를 해놨는데 태그처리가 되었나보네요
암튼 답변 감사합니다 ^^

SoulreaveR의 이미지

파일이 제대로 열렸는지 확인해보세요. umask로 인한 차이 같습니다만.

mirr187의 이미지

위에 분들이 언급한 것에 첨언하자면...

함수를 사용함에 있어서 return 값을 체크하지 않고 넘어가는건 큰 실수입니다..

파일이 정상적으로 열렸다는걸 뭘 믿고 확신하면서 짜는지 알 수 없는.. -_-;;

각 함수에 대한 return 값과 에러를 확인해보시기 바랍니다.

youdotan의 이미지

윈도우에서는 원하는 결과가 나옵니다.
결과 파일로 나오게 되는 result.txt입니다.

$result.txt$(윈도우)
=========================================
25th packet transmitted, 25th received
0th loss (loss ratio is 0 percent)
Propagation delay time is 87 us
Ave delay time is 58 us, Zitter is 0 us.
=========================================

$result.txt$(리눅스 페도라 9)
Thank you!

에러가 뜨는 게 아니라
"========================================="
요거를 찾으면 밑의 여섯줄을 저장하면서
또 찾으면 덮어쓰는 형식으로 제일 밑에 있는 정보가 찍히게 되는 것입니다.
리눅스는 문자열 구조가 뭔가 다른 건지...
제일 밑에 줄에 있는 Thank you! 라는 글만이 저장이 되는게 문제입니다.
딱히 에러가 뜨는 것이 아니라 결과가 잘못 나와서 찾을 수 없는것입니다.

딥변들 정말 감사드립니다.
혹시 해결방법 아시는 분 계시면 좀 답변좀 부탁드리겠습니다.

mach의 이미지

char buffer[255] = "=========================================\n";


char buffer[255] = "=========================================<span>\r</span>\n";

로 바꿔보세요.

유닉스/리눅스의 파일은 바이너리인 반면, 윈도우는 파일이 텍스트파일(ASCII)과 바이너리파일이 구분됩니다.
텍스트 파일인 경우, 줄바꿈의 표현이 두 시스템(운영체제)에서 차이를 보입니다.
윈도우는 \r\n이고, 유닉스/리눅스는 \n이지요.
하여간,...
주의를 요하는 경우가 많지요.
-----------
참고로, 소스의 헤더에서,

"&lt;" ===> &amp;lt;
"&gt;" ===> &amp;gt;

이렇게 표현하시면 정상적으로 나오겠습니다.

예를 들어,

#include &lt;stdio.h&gt;
를 보이기 위해,
#include <span>&amp;lt;</span>stdio.h<span>&amp;gt;</span>

라고 입력하시면 된다는 얘기지요.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

youdotan의 이미지

\r만 추가했더니 잘 되네요 ㅜ
덕분에 살았습니다.
진짜진짜 감사합니다 ㅜ
행복하세요 ^^^^^

tinywolf의 이미지

그래서 크로스플랫폼을 지원하는 소스는 신경써야할 것이 많죠. ㅎㅎ

하지만 리눅스용이라면..
윗분 말씀처럼 스크립트로 grep을 이용해서 호출하는게 훨씬 더 안정적이고 깔끔할지도 모르겠습니다.

ㅡ_ㅡ;

댓글 달기

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