LinuxÏÂÎļþµÄ²Ù×÷

×÷Õß: yo 2005-11-07 12:52:42
Ç°ÑÔ:
ÎÒÃÇÔÚÕâÒ»½Ú½«ÒªÌÖÂÛlinuxÏÂÎļþ²Ù×÷µÄ¸÷¸öº¯Êý.
ÎļþµÄ´´½¨ºÍ¶Áд
ÎļþµÄ¸÷¸öÊôÐÔ
Ŀ¼ÎļþµÄ²Ù×÷
¹ÜµÀÎļþ

--------------------------------------------------------------------------------
1¡£ÎļþµÄ´´½¨ºÍ¶Áд
ÎÒ¼ÙÉèÄãÒѾ­ÖªµÀÁ˱ê×¼¼¶µÄÎļþ²Ù×÷µÄ¸÷¸öº¯Êý(fopen,fread,fwriteµÈµÈ).µ±È»Èç¹ûÄã²»Çå³þµÄ»°Ò²²»Òª×ż±.ÎÒÃÇÌÖÂÛµÄϵͳ¼¶µÄÎļþ²Ù×÷ʵ¼ÊÉÏÊÇΪ±ê×¼¼¶Îļþ²Ù×÷·þÎñµÄ.
µ±ÎÒÃÇÐèÒª´ò¿ªÒ»¸öÎļþ½øÐжÁд²Ù×÷µÄʱºò,ÎÒÃÇ¿ÉÒÔʹÓÃϵͳµ÷Óú¯Êýopen.ʹÓÃÍê³ÉÒÔºóÎÒÃǵ÷ÓÃÁíÍâÒ»¸öcloseº¯Êý½øÐйرղÙ×÷.
#include
#include
#include
#include

int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);

int close(int fd);

openº¯ÊýÓÐÁ½¸öÐÎʽ.ÆäÖÐpathnameÊÇÎÒÃÇÒª´ò¿ªµÄÎļþÃû(°üº¬Â·¾¶Ãû³Æ,ȱʡÊÇÈÏΪÔÚµ±Ç°Â·¾¶ÏÂÃæ).flags¿ÉÒÔÈ¥ÏÂÃæµÄÒ»¸öÖµ»òÕßÊǼ¸¸öÖµµÄ×éºÏ.
O_RDONLY:ÒÔÖ»¶ÁµÄ·½Ê½´ò¿ªÎļþ.
O_WRONLY:ÒÔֻдµÄ·½Ê½´ò¿ªÎļþ.
O_RDWR:ÒÔ¶ÁдµÄ·½Ê½´ò¿ªÎļþ.
O_APPEND:ÒÔ×·¼ÓµÄ·½Ê½´ò¿ªÎļþ.
O_CREAT:´´½¨Ò»¸öÎļþ.
O_EXEC:Èç¹ûʹÓÃÁËO_CREAT¶øÇÒÎļþÒѾ­´æÔÚ,¾Í»á·¢ÉúÒ»¸ö´íÎó.
O_NOBLOCK:ÒÔ·Ç×èÈûµÄ·½Ê½´ò¿ªÒ»¸öÎļþ.
O_TRUNC:Èç¹ûÎļþÒѾ­´æÔÚ,Ôòɾ³ýÎļþµÄÄÚÈÝ.
Ç°ÃæÈý¸ö±êÖ¾Ö»ÄÜʹÓÃÈÎÒâµÄÒ»¸ö.Èç¹ûʹÓÃÁËO_CREATE±êÖ¾,ÄÇôÎÒÃÇҪʹÓÃopenµÄµÚ¶þÖÖÐÎʽ.»¹ÒªÖ¸¶¨mode±êÖ¾,ÓÃÀ´±íʾÎļþµÄ·ÃÎÊȨÏÞ.mode¿ÉÒÔÊÇÒÔÏÂÇé¿öµÄ×éºÏ.
-----------------------------------------------------------------
S_IRUSR Óû§¿ÉÒÔ¶Á S_IWUSR Óû§¿ÉÒÔд
S_IXUSR Óû§¿ÉÒÔÖ´ÐÐ S_IRWXU Óû§¿ÉÒÔ¶ÁдִÐÐ
-----------------------------------------------------------------
S_IRGRP ×é¿ÉÒÔ¶Á S_IWGRP ×é¿ÉÒÔд
S_IXGRP ×é¿ÉÒÔÖ´ÐÐ S_IRWXG ×é¿ÉÒÔ¶ÁдִÐÐ
-----------------------------------------------------------------
S_IROTH ÆäËûÈË¿ÉÒÔ¶Á S_IWOTH ÆäËûÈË¿ÉÒÔд
S_IXOTH ÆäËûÈË¿ÉÒÔÖ´ÐÐ S_IRWXO ÆäËûÈË¿ÉÒÔ¶ÁдִÐÐ
-----------------------------------------------------------------
S_ISUID ÉèÖÃÓû§Ö´ÐÐID S_ISGID ÉèÖÃ×éµÄÖ´ÐÐID
-----------------------------------------------------------------
ÎÒÃÇÒ²¿ÉÒÔÓÃÊý×ÖÀ´´ú±í¸÷¸öλµÄ±êÖ¾.Linux×ܹ²ÓÃ5¸öÊý×ÖÀ´±íʾÎļþµÄ¸÷ÖÖȨÏÞ.
00000.µÚһλ±íʾÉèÖÃÓû§ID.µÚ¶þλ±íʾÉèÖÃ×éID,µÚÈýλ±íʾÓû§×Ô¼ºµÄȨÏÞλ,µÚËÄλ±íʾ×éµÄȨÏÞ,×îºóһλ±íʾÆäËûÈ˵ÄȨÏÞ.
ÿ¸öÊý×Ö¿ÉÒÔÈ¡1(Ö´ÐÐȨÏÞ),2(дȨÏÞ),4(¶ÁȨÏÞ),0(ʲôҲûÓÐ)»òÕßÊÇÕ⼸¸öÖµµÄºÍ.
±ÈÈçÎÒÃÇÒª´´½¨Ò»¸öÓû§¶ÁдִÐÐ,×éûÓÐȨÏÞ,ÆäËûÈ˶ÁÖ´ÐеÄÎļþ.ÉèÖÃÓû§IDλÄÇôÎÒÃÇ¿ÉÒÔʹÓõÄģʽÊÇ--1(ÉèÖÃÓû§ID)0(×éûÓÐÉèÖÃ)7(1+2+4)0(ûÓÐȨÏÞ,ʹÓÃȱʡ)5(1+4)¼´10705:
open("temp",O_CREAT,10705);
Èç¹ûÎÒÃÇ´ò¿ªÎļþ³É¹¦,open»á·µ»ØÒ»¸öÎļþÃèÊö·û.ÎÒÃÇÒÔºó¶ÔÎļþµÄËùÓвÙ×÷¾Í¿ÉÒÔ¶ÔÕâ¸öÎļþÃèÊö·û½øÐвÙ×÷ÁË.
µ±ÎÒÃDzÙ×÷Íê³ÉÒÔºó,ÎÒÃÇÒª¹Ø±ÕÎļþÁË,Ö»Òªµ÷ÓÃclose¾Í¿ÉÒÔÁË,ÆäÖÐfdÊÇÎÒÃÇÒª¹Ø±ÕµÄÎļþÃèÊö·û.
Îļþ´ò¿ªÁËÒÔºó,ÎÒÃǾÍÒª¶ÔÎļþ½øÐжÁдÁË.ÎÒÃÇ¿ÉÒÔµ÷Óú¯ÊýreadºÍwrite½øÐÐÎļþµÄ¶Áд.
#include

ssize_t read(int fd, void *buffer,size_t count);
ssize_t write(int fd, const void *buffer,size_t count);

fdÊÇÎÒÃÇÒª½øÐжÁд²Ù×÷µÄÎļþÃèÊö·û,bufferÊÇÎÒÃÇҪдÈëÎļþÄÚÈÝ»ò¶Á³öÎļþÄÚÈݵÄÄÚ´æµØÖ·.countÊÇÎÒÃÇÒª¶ÁдµÄ×Ö½ÚÊý.
¶ÔÓÚÆÕͨµÄÎļþread´ÓÖ¸¶¨µÄÎļþ(fd)ÖжÁÈ¡count×Ö½Úµ½buffer»º³åÇøÖÐ(¼ÇסÎÒÃDZØÐëÌṩһ¸ö×ã¹»´óµÄ»º³åÇø),ͬʱ·µ»Øcount.
Èç¹ûread¶Áµ½ÁËÎļþµÄ½áβ»òÕß±»Ò»¸öÐźÅËùÖжÏ,·µ»ØÖµ»áСÓÚcount.Èç¹ûÊÇÓÉÐźÅÖжÏÒýÆð·µ»Ø,¶øÇÒûÓзµ»ØÊý¾Ý,read»á·µ»Ø-1,ÇÒÉèÖÃerrnoΪEINTR.µ±³ÌÐò¶Áµ½ÁËÎļþ½áβµÄʱºò,read»á·µ»Ø0.
write´ÓbufferÖÐдcount×Ö½Úµ½ÎļþfdÖÐ,³É¹¦Ê±·µ»Øʵ¼ÊËùдµÄ×Ö½ÚÊý.
ÏÂÃæÎÒÃÇѧϰһ¸öʵÀý,Õâ¸öʵÀýÓÃÀ´¿½±´Îļþ.

#include
#include
#include
#include
#include
#include
#include

#define BUFFER_SIZE 1024

int main(int argc,char **argv)

Ïà¹Ø×ÊѶ