[질문] 리눅스 고수님들 ... 저좀 살려주십시오
#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를 출력합니다.(윈도우에서만)
살려주세요..
이거 내일까지 못하면 여러 사람이 다칩니다...ㅜ
오버해서 미안하구요
단서라도 좋으니 답변 좀 부탁드리겠습니다.
첨부 | 파일 크기 |
---|---|
![]() | 12.47 KB |
원하시는 답변이
원하시는 답변이 아니라 죄송하지만,,
코드는 코드블럭 안에 넣어주시고요..
간단한 디버깅 방법을 익히시면 쉽게 해결할 수 있을거 같고요..
"=============\n" 을 좀 간단히 하시면 어떨까 싶고요..
리눅스에서라면
를 하시면 더 좋을거 같고요..
음.....
우선....첫번째 #include 뒤에 아무 헤더파일이 없는 것이 일단 인상적이구요....
그다음은 ip = fopen("dmesg.txt", "rt"); 열고자 하는 경로에 dmseg.txt파일이 있는지 확인 해보세요...
그리고 간단한 디버그 프린트문 넣어서 어느 라인에서 막히는지 테스트 해보심 될듯하네요
============================
Stay Hungry, Stay Foolish
============================
Stay Hungry, Stay Foolish
다른건 몰라도
헤더파일명이 없는건...
꺽쇠괄호를 kldp에서 html 태그로 인식해버린 결과가 아닐까...합니다...-.-;
-----새벽녘의 흡혈양파-----
-----새벽녘의 흡혈양파-----
질문자입니다.
다시 질문 보니 include 뒤에 아무것도 없네요.. stdio.h, string.h를 해놨는데 태그처리가 되었나보네요
암튼 답변 감사합니다 ^^
파일이 제대로
파일이 제대로 열렸는지 확인해보세요. umask로 인한 차이 같습니다만.
위에 분들이 언급한
위에 분들이 언급한 것에 첨언하자면...
함수를 사용함에 있어서 return 값을 체크하지 않고 넘어가는건 큰 실수입니다..
파일이 정상적으로 열렸다는걸 뭘 믿고 확신하면서 짜는지 알 수 없는.. -_-;;
각 함수에 대한 return 값과 에러를 확인해보시기 바랍니다.
질문자입니다.
윈도우에서는 원하는 결과가 나옵니다.
결과 파일로 나오게 되는 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! 라는 글만이 저장이 되는게 문제입니다.
딱히 에러가 뜨는 것이 아니라 결과가 잘못 나와서 찾을 수 없는것입니다.
딥변들 정말 감사드립니다.
혹시 해결방법 아시는 분 계시면 좀 답변좀 부탁드리겠습니다.
...
를
로 바꿔보세요.
유닉스/리눅스의 파일은 바이너리인 반면, 윈도우는 파일이 텍스트파일(ASCII)과 바이너리파일이 구분됩니다.
텍스트 파일인 경우, 줄바꿈의 표현이 두 시스템(운영체제)에서 차이를 보입니다.
윈도우는 \r\n이고, 유닉스/리눅스는 \n이지요.
하여간,...
주의를 요하는 경우가 많지요.
-----------
참고로, 소스의 헤더에서,
이렇게 표현하시면 정상적으로 나오겠습니다.
예를 들어,
라고 입력하시면 된다는 얘기지요.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
됩니다 ㅜ 감사합니다 !
\r만 추가했더니 잘 되네요 ㅜ
덕분에 살았습니다.
진짜진짜 감사합니다 ㅜ
행복하세요 ^^^^^
그래서
그래서 크로스플랫폼을 지원하는 소스는 신경써야할 것이 많죠. ㅎㅎ
하지만 리눅스용이라면..
윗분 말씀처럼 스크립트로 grep을 이용해서 호출하는게 훨씬 더 안정적이고 깔끔할지도 모르겠습니다.
ㅡ_ㅡ;
댓글 달기