Changeset 459 for trunk/libs
- Timestamp:
- Aug 13, 2018, 1:43:20 PM (6 years ago)
- Location:
- trunk/libs/mini-libc
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libs/mini-libc/stdio.c
r457 r459 26 26 #include <almosmkh.h> 27 27 #include <unistd.h> 28 #include <fcntl.h> 29 30 //////////////////////////////////////////////////////////////////////////////////////// 31 // stdio library global variables 32 //////////////////////////////////////////////////////////////////////////////////////// 33 34 FILE open_file_array[MAX_OPEN_FILE_PER_PROCESS]; // array of open files structures 35 36 //////////////////////////////////////////////////////////////////////////////////////// 37 // stdio library functions 38 //////////////////////////////////////////////////////////////////////////////////////// 28 39 29 40 ////////////////////////////////////////// … … 144 155 break; 145 156 } 146 /*147 157 case ('f'): // IEEE754 64 bits 148 158 // integer part : up to 10 decimal digits … … 234 244 break; 235 245 } 236 */237 246 default: // unsupported argument type 238 247 { … … 272 281 { 273 282 string[count] = 0; 283 274 284 return write( 1 , &string , count ); 275 285 } 276 } 286 } // end printf() 277 287 278 288 ///////////// … … 309 319 310 320 return count; 311 } 312 313 314 315 316 321 } // end snprintf() 322 323 //////////////////////////////////// 324 FILE * fopen( const char * pathname, 325 const char * mode ) 326 { 327 //TODO handle the "mode" argument 328 if( mode != NULL ) 329 { 330 printf("\n[ERROR] in %s : the mode argument must be NULL\n", __FUNCTION__ ); 331 return NULL; 332 } 333 334 // get a file descriptor from kernel 335 int fd = open( pathname, 336 O_CREAT | O_RDWR, 337 0 ); 338 339 if( fd < 0 ) 340 { 341 printf("\n[ERROR] in %s : file %s not found\n", __FUNCTION__ , pathname ); 342 return NULL; 343 } 344 if( fd > MAX_OPEN_FILE_PER_PROCESS ) 345 { 346 printf("\n[ERROR] in %s : not enough space for file %s\n", __FUNCTION__ , pathname ); 347 return NULL; 348 } 349 350 // register stream in open_file_array[] 351 open_file_array[fd].fd = fd; 352 open_file_array[fd].key = VALID_OPEN_FILE; 353 354 return &open_file_array[fd]; 355 } // end fopen() 356 357 /////////////////////////// 358 int fclose( FILE * stream ) 359 { 360 // check stream valid 361 if( stream->key != VALID_OPEN_FILE ) return EOF; 362 363 // get file descriptor from stream pointer 364 int fd = stream->fd; 365 366 // remove stream from open_file_array[] 367 open_file_array[fd].key = 0; 368 369 return close( fd ); 370 } // end fclose() 371 372 ///////////////////////////////// 373 int fprintf( FILE * stream, 374 const char * format, ... ) 375 { 376 char string[4096]; 377 va_list args; 378 int count; 379 int fd; 380 381 // check stream valid 382 if( stream->key != VALID_OPEN_FILE ) return EOF; 383 384 va_start( args, format ); 385 count = xprintf( string , 4095 , format , &args ); 386 va_end( args ); 387 388 if ( count == -1 ) 389 { 390 display_string( "fprintf : xprintf failure" ); 391 return -1; 392 } 393 else 394 { 395 // get file descriptor from file pointer 396 fd = stream->fd; 397 398 string[count] = 0; 399 400 return write( fd , &string , count ); 401 } 402 } // end fprintf() 403 404 405 406 407 -
trunk/libs/mini-libc/stdio.h
r445 r459 31 31 ********************************************************************************************/ 32 32 33 /********************************************************************************************* 34 * This defines the user level FILE structure. 35 ********************************************************************************************/ 36 37 #define MAX_OPEN_FILE_PER_PROCESS 256 38 #define VALID_OPEN_FILE 0x12345678 39 #define EOF -1 40 #define NULL (void *)0 41 42 typedef struct file_s 43 { 44 int fd; 45 int key; 46 } 47 FILE; 33 48 34 49 /********************************************************************************************* … … 67 82 const char * format, ... ); 68 83 84 /********************************************************************************************* 85 * This function opens the file identified by the <pathname> argument and associates 86 * the stream pointed by <FILE> with it. 87 * The <mode> argument is a string that can have the following values: 88 * - "r" Open text file for reading. 89 * The stream is positioned at the beginning of the file. 90 * - "r+" Open for reading and writing. 91 * The stream is positioned at the beginning of the file. 92 * - "w" Truncate the file to zero length or create text file for writing. 93 * The stream is positioned at the beginning of the file. 94 * - "w+" Open for reading and writing. 95 * The file is created if it does not exist, otherwise it is truncated. 96 * The stream is positioned at the beginning of the file. 97 * - "a" Open for writing. The file is created if it does not exist. 98 * The stream is positioned at the end of the file. 99 * Subsequent writes to the file will always end up at the current end of file, 100 * irrespective of any intervening fseek() or similar. 101 * - "a+" Open for reading and writing. 102 * The file is created if it does not exist. 103 * The stream is positioned at the end of the file. 104 * Subsequent writes to the file will always end up at the current end of file, 105 * irrespective of any intervening fseek() or similar. 106 ********************************************************************************************* 107 * @ pathname : file pathname. 108 * @ mode : must be NULL <=> only "w+" mode is supported. 109 * @ returns a stream pointer if success / returns NULL if file not found. 110 ********************************************************************************************/ 111 FILE * fopen( const char * pathname, 112 const char * mode ); 113 114 /********************************************************************************************* 115 * This function dissociates the stream from its underlying file and close this file. 116 * If the stream was being used for output, any buffered data is written first. 117 ********************************************************************************************* 118 * @ stream : pointer on a stream. 119 * @ returns 0 if success / returns EOF if failure. 120 ********************************************************************************************/ 121 int fclose( FILE * stream ); 122 123 /********************************************************************************************* 124 * This function copies a formated string to an output stream identified by the <stream> 125 * argument. It can be a regular file or a character oriented output device. 126 ********************************************************************************************* 127 * @ stream : pointer on a stream. 128 * @ format : formated string. 129 * @ returns number of characters written if success / returns -1 if failure. 130 ********************************************************************************************/ 131 int fprintf( FILE * stream, 132 const char * format, ... ); 133 134 69 135 #endif // _STDIO_H_ -
trunk/libs/mini-libc/unistd.h
r449 r459 45 45 46 46 /***************************************************************************************** 47 * This function read bytes from an open file identified by itsfile descriptor.47 * This function read bytes from an open file identified by the <fd> file descriptor. 48 48 * This file can be a regular file or a character oriented device. 49 49 ***************************************************************************************** 50 * @ f ile_id: open file index in fd_array.50 * @ fd : open file index in fd_array. 51 51 * @ buf : buffer virtual address in user space. 52 52 * @ count : number of bytes. … … 58 58 59 59 /***************************************************************************************** 60 * This function writes bytes to an open file identified by itsfile descriptor.60 * This function writes bytes to an open file identified by the <fd> file descriptor. 61 61 * This file can be a regular file or character oriented device. 62 62 ***************************************************************************************** 63 * @ f ile_id: open file index in fd_array.63 * @ fd : open file index in fd_array. 64 64 * @ buf : buffer virtual address in user space. 65 65 * @ count : number of bytes. … … 112 112 * TODO not implemented yet... 113 113 ***************************************************************************************** 114 * @ f ile_id[0] : [out] read only file descriptor index.115 * @ f ile_id[1] : [out] write only file descriptor index.114 * @ fd[0] : [out] read only file descriptor index. 115 * @ fd[1] : [out] write only file descriptor index. 116 116 * @ return 0 if success / return -1 if failure. 117 117 ****************************************************************************************/
Note: See TracChangeset
for help on using the changeset viewer.