LinuxQuestions.org
Register a domain and help support LQ
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices

Reply
 
LinkBack Search this Thread
Old 10-03-2002, 09:39 PM   #1
eggs
Member
 
Registered: Jun 2002
Location: Jackson, TN
Distribution: Arch Linux 0.6
Posts: 60

Rep: Reputation: 15
My program is seg faulting?


Hey guys... I'm trying to right this program to read basic info from /proc files and display it on the screen. The problem is it seg faults and I don't know why :\

Quote:
#include <stdio.h>
#include <stdlib.h>

void cpu( void )
{
char item[50];
FILE *cfPtr;
if( ( cfPtr = fopen( "/proc/cpuinfo", "r" ) ) == NULL ){ printf( "Error, make sure /proc fs is mounted\n" ); }
else{
printf( "\n" );
while( !feof( cfPtr ) ){
fgets( item, 100, cfPtr );
if( item[0] == 'v' && item[1] == 'e' && item[2] == 'n' && item[3] == 'd' ){
printf( "%s", item );
}
if( item[0] == 'm' && item[1] == 'o' && item[2] == 'd' && item[3] == 'e' && item[4] == 'l' && item[6] == 'n' ){
printf( "%s", item );
}
}
fclose( cfPtr );
}
}

void ver( void )
{
char item[50];
FILE *cfPtr;
if( ( cfPtr = fopen( "/proc/version", "r" ) ) == NULL ){ printf( "Error, make sure /proc fs is mounted\n" ); }
else{
while( !feof( cfPtr ) ){
fgets( item, 100, cfPtr );
printf( "%s", item );
}
}
fclose( cfPtr );
}

void up( void )
{
char item[50];
FILE *cfPtr;
if( ( cfPtr = fopen( "/proc/uptime", "r" ) ) == NULL ){ printf( "Error, make sure /proc fs is mounted\n" ); }
else{
while( !feof( cfPtr ) ){
fgets( item, 100, cfPtr );
printf( "%s", item );
}
}
fclose( cfPtr );
}

int main( void )
{
printf( "CPU data: " );
cpu();
printf( "\n" );
printf( "Kernel Version: " );
ver();
printf( "\n" );
printf( "Uptime: " );
up();

return 0;
}
It seg faults somewhere between printing the cpu model and printing the new line in main. If I comment out cpu(); so it doesn't run it segfaults at the end of up(); but ver(); seems to run fine
 
Old 10-03-2002, 10:36 PM   #2
akohlsmith
Member
 
Registered: Apr 2002
Distribution: Slackware
Posts: 114

Rep: Reputation: 15
char item[50];
fgets( item, 100, cfPtr );

Sorry but this doesn't work. You've only allocated space for 49 characters and then you're allowing up to 100 to be stuffed there. Guaranteed segfault territory.

Either use properly-sized arrays or malloc() enough memory for the task. C doesn't have on-the-fly memory compression yet :-)

You may also want to try the various strcmp/strstr functions instead of going char by char.
 
Old 10-06-2002, 02:32 AM   #3
eggs
Member
 
Registered: Jun 2002
Location: Jackson, TN
Distribution: Arch Linux 0.6
Posts: 60

Original Poster
Rep: Reputation: 15
Thanks, knew it would be something stupid :\
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Segmentation faulting? Brennan Linux From Scratch 8 10-05-2005 02:37 PM
Apache 2 Child Processes Seg faulting! DavidHayes Linux - Software 1 04-20-2005 07:54 PM
Seg Faulting C. Where? DaveyB Programming 9 11-04-2004 02:00 PM
C seg fault drigz Programming 5 10-01-2004 03:35 PM
Compiler seg faulting fitz9948 Slackware 2 05-11-2004 03:04 PM


All times are GMT -5. The time now is 04:28 AM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration