jonas.elofsson wrote:
> 
> Ok, tried some other stuff, see test code below. When the counter 'i' reaches 
> 128 (* 8 = 1024 files opened and closed) i get bad printouts from the open 
> and read calls.
> 
> 
> My test code:
> 
> (panna.c)
> 
> #include <stdio.h>
> #include <fcntl.h>
> 
> void msDelay(int ms) 
> {
>   int i,a;
>   int delayvar=10;
>   
>   for (a=0;a<ms;a++) 
>   {
>     for (i=0;i<33084;i++) 
>     {
>       delayvar*=2;        
>       delayvar/=2;
>     } 
>   }
> }   
> 
> float readtemp(char* pin)
> {
>       int fil;
>       char filename[100];
>       float tot = 0, high = 0, temp, dc;
>       
>       char c;
> 
>       sprintf(filename, "/proc/diskstats");
> 
>       fil = open(filename, O_RDONLY);
> 
>       if(fil < 0) printf("Open error!");
> 
>       if(read(fil, &c, 1) != 1) printf("Read error!");

close(file);

> 
>       if(tot == 0)
>       {
                return 0; // file handle lost
>       }
> 
>       dc = high/tot;
> 
>       temp = (dc - 0.32) / 0.0047;
> 
/*      close(fil); */
> 
>       return temp;
> }
> 
> int main(void)
> {
>       //printf("\x1B[1;0;0;10;31;14;4;0;0Q");
>       //printf("\x1B[2J\x1B[4;8H=)\x1B[2;3HJonas \x01 Emma");
> 
>       float temp[8];
>       char* pins[8] = {"PG01", "PG02", "PG03", "PG04", "PG05", "PG16", 
> "PG17", "PG18"};
>       int i, j = 0;
> 
>       printf("\x1B[2J"); //ClrScr
> 
>       while(1)
>       {
>               for(i = 0; i <= 7; i++)
>               {
>                       temp[i] = readtemp(pins[i]);
>               }
>               
>               j++;            
>                       
>               printf("\x1B[0;0H"); //GotoXY 0,0
>               
>               printf(" %02.0f %02.0f %02.0f %02.0f %02.0f\n", temp[0], 
> temp[1], temp[2], temp[3], temp[4]);
>               printf(" %02.0f %02.0f    %04.1f\n", temp[5], temp[6], temp[7]);
>               printf(" %d", j);
>               
>               fflush(stdout);         
>               
>               msDelay(10);            
>               
>       }               
> 
>       return 0;
> 
> }
> 
> Makefile:
> 
> AXIS_USABLE_LIBS = UCLIBC GLIBC
> include $(AXIS_TOP_DIR)/tools/build/Rules.axis
> 
> PROGS = panna
> 
> all: $(PROGS)
> $(PROGS): $(PROGS).o
>       $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
> 
> clean:
>       rm -f $(PROGS) *.o core
> 
> 
> Best regards, Jonas
> 
> --- In [email protected], j...@... wrote:
>> on proc you should use open() close() read()
>>
>> please post the complete code
>>
>>
>>
>>
>> Quoting "jonas.elofsson" <jelofs...@...>:
>>
>>> Hi!
>>>
>>> I have a problem reading files in the /proc directory in C.
>>>
>>> I made a module for reading SMARTTEMP temperature sensors, and it   
>>> works great. I made it to create one file for each I/O pin under   
>>> /proc/smarttemp/. Working beautifully.
>>>
>>> I also made a module for controlling my LCD display, and that to   
>>> works like a charm.
>>>
>>> I put together a small test program to read 8 different temperaturs   
>>> from different sensors and then display them on the display updating  
>>>  once every second.
>>>
>>> Works great, for two minutes...
>>>
>>> Then, when one of the /proc files is read for the 1024:th time   
>>> problems occurs. It turns out the file descriptors are out..! They   
>>> don't seem to get relesaed when I do a fclose (I use fopen and   
>>> fclose on them, is this a problem?).
>>>
>>> I get no problems if I change the program to read from a file on the  
>>>  normal FS instead.
>>>
>>> If I try to read some other file in /proc i get the same error after  
>>>  1024 loops... So it seems it's not in my driver code.
>>>
>>> I tried to do a system("cp /proc/smarrtemp/PG01 /var/temp"); for   
>>> each measurement and then reading the file in /var instead, trying   
>>> to fool it a bit, just for testing. But after about 1024 copies I   
>>> still get problems.
>>>
>>> I would be very thankful for any ideas about why this is and how to   
>>> get it working.
>>>
>>> I use the image on ACMEs homepage, 2.6 something. =)
>>>
>>> Best regards, Jonas
>>>
>>>
>>>
>>>
>>
>>
>> -- 
>> John Crispin
>> hacking, coding, etc
>> blogic on irc
>>
>>     _______                     ________        __
>>    |       |.-----.-----.-----.|  |  |  |.----.|  |_
>>    |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
>>    |_______||   __|_____|__|__||________||__|  |____|
>>             |__| W I R E L E S S   F R E E D O M
>>    KAMIKAZE (bleeding edge) -----------------------
>>     * 10 oz Vodka       Shake well with ice and strain
>>     * 10 oz Triple sec  mixture into 10 shot glasses.
>>     * 10 oz lime juice  Salute!
>>    ---------------------------------------------------
>>
> 
> 
> 
> 
> ------------------------------------
> 
> Yahoo! Groups Links
> 
> 
> 

Reply via email to