linux 0.11 ÄÚºËѧϰ read_write.c
/*
* ¸ÃÎļþʵÏÖϵͳµ÷ÓÃread£¬writeºÍlseek¡£
*/
/*
* linux/fs/read_write.c
*
* (C) 1991 Linus Torvalds
*/
#include <sys/stat.h>
#include <errno.h>
#include <sys/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <asm/segment.h>
/* ×Ö·ûÉ豸¶Áдº¯Êý */
extern int rw_char(int rw,int dev, char * buf, int count, off_t * pos);
/* ¶Á¹ÜµÀ²Ù×÷º¯Êý */
extern int read_pipe(struct m_inode * inode, char * buf, int count);
/* д¹ÜµÀ²Ù×÷º¯Êý */
extern int write_pipe(struct m_inode * inode, char * buf, int count);
/* ¿éÉ豸¶Á²Ù×÷º¯Êý */
extern int block_read(int dev, off_t * pos, char * buf, int count);
/* ¿éÉ豸д²Ù×÷º¯Êý */
extern int block_write(int dev, off_t * pos, char * buf, int count);
/* ¶ÁÎļþ²Ù×÷º¯Êý */
extern int file_read(struct m_inode * inode, struct file * filp,
char * buf, int count);
/* дÎļþ²Ù×÷º¯Êý */
extern int file_write(struct m_inode * inode, struct file * filp,
char * buf, int count);
/* ÖØ¶¨Î»Îļþ¶ÁдָÕëϵͳµ÷Óú¯Êý£¬²ÎÊýfdÊÇÎļþ¾ä±ú£¬offsetÊÇеÄÎļþ */
/* ¶ÁÐ´Æ«ÒÆÁ¿£¬originÊÇÆ«ÒÆµÄÆðʼµØÖ·£¬¿ÉÄÜÊÇÏÂÃæµÄÈý¸öÖµ£ºSEEK_SET */
/* ÎļþµÄ¿ªÊ¼´¦£¬SEEK_CURµ±Ç°µÄ¶ÁдλÖã¬SEEK_ENDÎļþ½áβ´¦ */
int sys_lseek(unsigned int fd,off_t offset, int origin)
{
struct file * file;
int tmp;
// Èç¹ûÎļþ¾ä±úÖµ´óÓÚ³ÌÐò×î¶à´ò¿ªÎļþÊýNR_OPEN(20)£¬»òÕ߸þä±úµÄÎļþ½á¹¹Ö¸ÕëΪ¿Õ£¬»òÕß
// ¶ÔÓ¦Îļþ½á¹¹µÄi ½Úµã×Ö¶ÎΪ¿Õ£¬»òÕßÖ¸¶¨É豸ÎļþÖ¸ÕëÊDz»¿É¶¨Î»µÄ£¬Ôò·µ»Ø³ö´íÂë²¢Í˳ö
if (fd >= NR_OPEN || !(file=current->filp[fd]) || !(file->f_inode)
|| !IS_SEEKABLE(MAJOR(file->f_inode->i_dev)))
return -EBADF;
// Èç¹ûÎļþ¶ÔÓ¦µÄi ½ÚµãÊǹܵÀ½Úµã£¬Ôò·µ»Ø³ö´íÂ룬Í˳ö
if (file->f_inode->i_pipe)
return -ESPIPE;
switch (origin) {
case 0: // SEEK_SET
// ÈôÆ«ÒÆÖµÐ¡ÓÚÁ㣬Ôò³ö´í
if (offset<0) return -EINVAL;
// ÉèÖÃÎļþ¶ÁдָÕëµÈÓÚoffset
file->f_
Ïà¹ØÎĵµ£º
Linux¸÷·¢Ðа汾 ÓÅȱµã ¼ò½é
À´Ô´: ChinaUnix²©¿Í ¡¡ÈÕÆÚ£º 2008.01.21 13:43¡¡(¹²ÓÐ25ÌõÆÀÂÛ) ÎÒÒªÆÀÂÛ
Linux×îÔçÓÉLinus Benedict TorvaldsÔÚ1991Ä꿪ʼ±àд¡£ÔÚÕâ֮ǰ£¬Richard
Stallman´´½¨ÁËFree Software
Foundation£¨FSF£©×éÖ¯ÒÔ¼°GNUÏîÄ¿£¬²¢²»¶ÏµÄ±àд´´½¨GNU³ÌÐò£¨´ËÀà³ÌÐòµÄÐí¿É·½Ê½¾ùΪ ......
Yum£¨È«³ÆÎª Yellow dog Updater, Modified£©ÊÇÒ»¸öÔÚFedoraÖеÄshellǰ¶ËÈí¼þ°ü¹ÜÀíÆ÷¡£»ùÓÚrpm°ü¹ÜÀí£¬Äܹ»´ÓÖ¸¶¨µÄ·þÎñÆ÷×Ô¶¯ÏÂÔØRPM°ü²¢ÇÒ°²×°£¬¿ÉÒÔ×Ô¶¯´¦ÀíÒÀÀµÐÔ¹ØÏµ£¬²¢ÇÒÒ»´Î°²×°ËùÓÐÒÀÀµµÄÈíÌå°ü£¬ÎÞÐë·±ËöµØÒ»´Î´ÎÏÂÔØ¡¢°²×°¡£
ÏÂÃæ½éÉÜÒ»¸ö´Ó¹âÅÌ×öyumÔ´µÄСʵÑé
±¾ÊÔÑéʹÓÃCentOS-5.4-i386-bin,DVD.isoÈí¼þ° ......
ǶÈëʽLinux²Ù×÷ϵͳѧϰ¹æ»®
ARM+LINUX·Ïߣ¬Ö÷¹¥Ç¶ÈëʽLinux²Ù×÷ϵͳ¼°ÆäÉÏÓ¦ÓÃÈí¼þ¿ª·¢Ä¿±ê£º
£¨1£© ÕÆÎÕÖ÷Á÷ǶÈëʽ΢´¦ÀíÆ÷µÄ½á¹¹ÓëÔÀí£¨³õ²½¶¨Îªarm9£©
£¨2£© ±ØÐëÕÆÎÕÒ»¸öǶÈëʽ²Ù×÷ϵͳ £¨³õ²½¶¨Îªuclinux»òlinux,°æ±¾´ý¶¨£©
£¨3£© ±ØÐëÊìϤǶÈëʽÈí¼þ¿ª·¢Á÷³Ì²¢ÖÁÉÙ×öÒ ......
×ܽáÕ½ڣºµÚÈý½Ú ×Ö·ûÉ豸Çý¶¯
ÕâÒ»ÕÂÖ÷ÒªÊǽ²Ò»Ð©×Ö·ûÉ豸Çý¶¯³ÌÐòµÄÏà¹ØÖªÊ¶¡£ÔÚ½øÐÐ×Ö·ûÉ豸Çý¶¯³ÌÐòѧϰ֮ǰ£¬ÎÒÃDZØÐëµÃŪÃ÷°×Ò»¸öÎÊÌ⣺Çý¶¯³ÌÐòʱ¸øËÓõġ£
ºÜ¶àÇý¶¯³ÌÐòµÄ³õѧÕߣ¬°´ÕÕÒ»°ã±à³ÌÓïÑÔ£¨C£¬javaµÈµÈ£©±àдӦÓóÌÐòµÄ¾Ñ飬º¯Êý¾ÍÊÇÓÃÀ´µ÷Óõġ£ÕâÖÖµ÷ÓùØÏµ£¬ÔÚÓ¦ÓÿռäÀ´¿´£¬ÏÞÖÆ²»ÊǺÜÃ÷ÏÔ¡£ºÜ¶à ......
/*
* ¸ÃÎļþÖ÷ҪʵÏÖµÄÊÇtruncateº¯Êý£¬¸Ãº¯ÊýÊÇÊÍ·ÅÖ¸¶¨i
* ½ÚµãÔÚÉ豸ÉÏÕ¼ÓõÄËùÓÐÂß¼¿é£¬°üÀ¨Ö±½Ó¿é¡¢Ò»´Î¼ä
* ½Ó¿éºÍ¶þ´Î¼ä½Ó¿é
*/
/*
* linux/fs/truncate.c
*
* (C) 1991 Linus Torvalds
*/
#include <linux/sched.h>
......