Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

linux 0.11 ÄÚºËѧϰ file_dev.c


/*
 *  linux/fs/file_dev.c
 *
 *  (C) 1991  Linus Torvalds
 */
#include <errno.h>
#include <fcntl.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <asm/segment.h>
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
/* ¸ù¾Ýi ½ÚµãºÍÎļþ½á¹¹£¬¶ÁÉ豸Êý¾Ý£¬ÎªÉϲãµÄreadº¯ÊýÌṩº¯Êý */
int file_read(struct m_inode * inode, struct file * filp, char * buf, int count)
{
// ÓÉi ½Úµã¿ÉÒÔÖªµÀÉ豸ºÅ£¬ÓÉfilp ½á¹¹¿ÉÒÔÖªµÀÎļþÖе±Ç°¶ÁдָÕëλÖá£buf Ö¸¶¨Óû§Ì¬ÖÐ
// »º³åÇøµÄλÖã¬count ΪÐèÒª¶ÁÈ¡µÄ×Ö½ÚÊý¡£·µ»ØÖµÊÇʵ¼Ê¶ÁÈ¡µÄ×Ö½ÚÊý£¬»ò³ö´íºÅ(СÓÚ0)
int left,chars,nr;
struct buffer_head * bh;
// ÈôÐèÒª¶ÁÈ¡µÄ×Ö½Ú¼ÆÊýֵСÓÚµÈÓÚÁ㣬Ôò·µ»Ø
if ((left=count)<=0)
return 0;

while (left) 
{
// ¸ù¾Ýi ½ÚµãºÍÎļþ±í½á¹¹ÐÅÏ¢£¬È¡Êý¾Ý¿éÎļþµ±Ç°¶ÁдλÖÃÔÚÉ豸É϶ÔÓ¦µÄÂß¼­¿éºÅnr¡£Èônr ²»
// Ϊ0£¬Ôò´Ói ½ÚµãÖ¸¶¨µÄÉ豸É϶ÁÈ¡¸ÃÂß¼­¿é
if (nr = bmap(inode,(filp->f_pos)/BLOCK_SIZE)) // µÃµ½Âß¼­¿éºÅ
{
if (!(bh=bread(inode->i_dev,nr)))
break;
} else
bh = NULL;
// ¼ÆËãÎļþ¶ÁдָÕëÔÚÊý¾Ý¿éÖÐµÄÆ«ÒÆÖµnr
nr = filp->f_pos % BLOCK_SIZE;
// È»ºóÓ뻹Ðè¶ÁÈ¡µÄ×Ö½ÚÊýleft ×÷±È½Ï£¬ÆäÖÐСֵ¼´Îª±¾´ÎÐè¶ÁµÄ×Ö½ÚÊýchars
chars = MIN( BLOCK_SIZE-nr , left );
// µ÷Õû¶ÁдÎļþÖ¸Õë
filp->f_pos += chars;
// Ê£Óà×Ö½Ú¼ÆÊýÏàÓ¦¼õÈ¥chars
left -= chars;
if (bh) // Èç¹û¶Á³öÁËÊý¾Ý
{
char * p = nr + bh->b_data; // ½«p Ö¸Ïò¶Á³öÊý¾Ý¿é»º³åÇøÖпªÊ¼¶ÁÈ¡µÄλÖÃ
// ¸´ÖÆchars×Ö½Úµ½Óû§µÄ»º³åÇø
while (chars-->0)
put_fs_byte(*(p++),buf++);
brelse(bh);

// ·ñÔò½«Óû§µÄ»º³åÇøÈ«²¿ÉèÖóÉ0
else
{
/*************************************/
while (chars-->0)
put_fs_byte(0,buf++);
/**************************************/
}
}
// Ð޸ĸÃi ½ÚµãµÄ·ÃÎÊʱ¼äΪµ±Ç°Ê±¼ä¡£·µ»Ø¶ÁÈ¡µÄ×Ö½ÚÊý
inode->i_atime = CURRENT_TIME;
return (count-left)?(count-left):-ERROR;
/*
* ¸Ãº¯ÊýʵÏÖµÄÊǸ


Ïà¹ØÎĵµ£º

ǶÈëʽLinux²Ù×÷ϵͳѧϰ¹æ

ǶÈëʽLinux²Ù×÷ϵͳѧϰ¹æ»®
ARM+LINUX·Ïߣ¬Ö÷¹¥Ç¶ÈëʽLinux²Ù×÷ϵͳ¼°ÆäÉÏÓ¦ÓÃÈí¼þ¿ª·¢Ä¿±ê£º 
£¨1£© ÕÆÎÕÖ÷Á÷ǶÈëʽ΢´¦ÀíÆ÷µÄ½á¹¹ÓëÔ­Àí£¨³õ²½¶¨Îªarm9£© 
£¨2£© ±ØÐëÕÆÎÕÒ»¸öǶÈëʽ²Ù×÷ϵͳ £¨³õ²½¶¨Îªuclinux»òlinux,°æ±¾´ý¶¨£© 
£¨3£© ±ØÐëÊìϤǶÈëʽÈí¼þ¿ª·¢Á÷³Ì²¢ÖÁÉÙ×öÒ ......

linuxÃüÁîµÄÈ«³Æ~~~·

×ªÔØ×Ô£ºhttp://www.91linux.com/html/article/go/20090205/15634.html
bin = BINaries £¨binary)
/dev = devices
/etc = ETCetera
etcetera¸½¼ÓµÄÈË, ¸½¼ÓÎï, ÒÔ¼°ÆäËü, µÈµÈ
/lib = LIBrary
/proc = PROCesses
/sbin
= Superuser BINaries
/tmp = TeMPorary
/usr = Unix Shared
Resources
/var = ......

Linux erron³£Á¿

#define EPERM            1      /* Operation not permitted */
#define ENOENT           2      /* No such file or directory */
#define ESRCH&nbs ......

linuxÌõ¼þ±äÁ¿Àý³Ì

#include
#include
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void *thread1(void *);
void *thread2(void *);
int i=1;
main(void)
{
pthread_t t_a;
pthread_t t_b;
pthread_create(&t_a,NULL,thread1,(void *)NULL) ......

¡¶LINUXÉ豸Çý¶¯³ÌÐò¡·Ñ§Ï°Ôý¼Ç£¨Ò»£©

×ܽáÕ½ڣºµÚÒ»Õ É豸Çý¶¯³ÌÐò¼ò½é
          µÚ¶þÕ ¹¹ÔìºÍÔËÐÐÄ£¿é
Ìáµ½Çý¶¯³ÌÐò¾Í²»µÃ²»ÏÈ˵ÏÂÁ½¸öÃû´Ê£ºÄں˿ռäºÍÓû§¿Õ¼ä¡£Óû§¿Õ¼ä¼´Óû§Ó¦ÓÃËùÔËÐеĿռ䣬Äں˿ռäÖµµÃÊDzÙ×÷ϵͳÄÚºËÔËÐеĿռ䡣Óû§¿Õ¼ä²»ÄÜÖ±½ÓÒýÓûòÕß²Ù×÷Äں˿ռäµÄÊý¾Ý£¬Äں˿ռäÒ²²»ÄÜÖ±½ ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ