linuxµÄÆÕͨÎļþÊÂÊý¾Ý×ֽڵļ¯ºÏ.ÕâЩÊý¾Ý×Ö½ÚÒ»¸ö½ÓÒ»¸ö˳ÐòµØ´æ´¢ÔÚ¸ÃÎļþÖÐ.ËùÒÔÒ²³ÆË³Ðò(sequential)Îļþ.linux²¢²»ÔÚÊý¾ÝÉÏÔö¼ÓÈκÎÀàÐ͵ÄÄÚ²¿½á¹¹.¾ÍlinuxÀ´Ëµ,Ëü²¢²»ÊǰÑÊý¾Ý·Ö½â³É¼Ç¼»ò×Ö¶Î.Èç¹ûÒ»ÏîÌØ¶¨µÄÓ¦ÓÃÒªÇóʹÓÃijÖÖÀàÐ͵ÄÄÚ²¿Êý¾Ý½á¹¹,ÔòÓÉ×÷ΪÄãÔÚÊý¾ÝÉÏÔö¼ÓÏàÓ¦µÄ½á¹¹.ÕâʹµÃlinux¶ÔÎļþµÄ½Ó¿Ú±äµÃÌØ±ð¼òµ¥.
ÎļþÃèÊö·û
ÔÚlinuxϵͳ,ͨ¹ýÎļþÃèÊö·û·ÃÎÊÎļþ.ÿ¸ö½ø³Ì×î¶àÄܹ»Í¬Ê±Ê¹ÓÃOPEN_MAX¸öÎļþÃèÊö·û.ͨ¹ý±ê׼ͷÎļþ
OPEN_MAX µÃ¶¨Òåʵ¼ÊÉÏÊÇ
µ±Æô¶¯Ò»¸ö½ø³Ìʱºò,ÎļþÃèÊö·û0£¬1ºÍ2ÒѾ·ÖÅä²¢±»Ê¹ÓÃ.ÎļþÃèÊö·û0ÓÃ×÷±ê×¼ÊäÈëÉ豸 1ÓÃ×÷Êä³öÉ豸 2ÓÃ×÷´íÎóÊä³öÉ豸.
ÿ¸ö·ÖÅäµÃÎļþÃèÊö·ûºÍÒ»¸ö´ò¿ªµÄÎļþÃèÊö(Óë¸ÃÎļþÓйصÄÐÅÏ¢½á¹¹,ÐÅÏ¢½á¹¹ÓУºÆ«ÒÆÖµoffset,Îļþ·ÃÎÊģʽmode,ÆäËûÓйرêÖ¾flag)ÏàÁªÏµ..
openϵͳµ÷ÓÃ
#include
#include
#include
int open(const char *path,int flags);
int open(const char *path,int flags,mode_t mode);
flags²ÎÊý¹æ¶¨ÈçºÎ´ò¿ª¸ÃÎļþ ÓÐÈý¸ö²ÎÊýÑ¡Ôñ£º
O_RDONLY Ö»¶Á
O_WRONLY ֻд
O_RDWR ¶Áд
»¹¿ÉÒÔÀûÓÃÒÔÏÂÈÎÒâ×éºÏ£º
O_CREAT ´ò¿ªÎļþʱºò,Èç¹ûÎļþ²»´æÔÚÔò½¨Á¢Îļþ
O_EXCL Èç¹ûÒѾÖÃO_CREAT²¢ÇÒÎļþ´æÔÚ,ÔòÇ¿ÖÆopen()ʧ°Ü
O_TRUNC ÔÚopen()ʱºò,½«Îļþ³¤¶È½ØÖÁ0
O_APPEND Ç¿ÖÆwrite()дÔÚÎļþµÃ½áÊø´¦
»¹¿ÉÒԹ涨ÁíÍâһЩ±êÖ¾,µ«ÊÇÔÚÆÕͨÎļþÖв¢²»Ê¹ÓÃËûÃÇ.ËùÓÐÕâЩ±êÖ¾ÖµµÃ·ûºÅÃû³Æ¿ÉÒÔͨ¹ý#include
²ÎÊýmodeÓÃÀ´¹æ¶¨¸ÃÎļþµÄ·ÃÎÊȨÏÞλ.
S_IRUSR ÎļþËùÓÐÕߵĶÁȨÏÞλ
S_IWUSR ÎļþËùÓÐÕßµÄдȨÏÞλ
S_IXUSR ÎļþËùÓÐÕßµÄÖ´ÐÐȨÏÞλ
S_IRGRP ÎļþÓû§×éµÄ¶ÁȨÏÞλ
S_IWGRP ÎļþÓû§×éµÄдȨÏÞλ
S_IXGRP Îļþ¡£¡£¡£¡£Ö´ÐÐȨÏÞ
S_IROTH ÎļþÆäËûÓû§µÄ¶ÁȨÏÞλ
S_IWOTH ÎļþÆäËûÓû§µÄдȨÏÞλ
S_IXOTH ÎļþÆäËûÓû§µÄÖ´ÐÐȨÏÞλ
S_IRWXU=S_IRUSR|S_IWUSR|S_IXUSR
S_IRWXG=S_IRGRP|S_IWGRP|S_IXGRP
S_IRWXO=S_IROTH|S_IWOTH|S_IXOTH
S_ISUID ÖÃset-uidλ
S_ISGID ÖÃset-gidλ
µ±Ò»¸ö½ø³Ì´ú±íÄã´´½¨Îļþʱºò,ÆäȨÏÞλÓÉÓë¸Ã½ø³ÌÏàÁªÏµµÄumaskÖµËùÐÞ¸Ä.½ø³ÌÀûÓÃÏÂÁй«Ê½¾ö¶¨±»´´½¨µÄÎļþµÄʵ¼ÊȨÏÞλ£º
mode&(~umask)
Õâ¸ö±íʾ,Èç¹û³ÌÐòËù´´½¨µÄÎļþÉÏËùµÃµ½µÄȨÏÞλºÍÔÚopen()µ÷ÓÃÖÐËùÒªÇóµÄmode²ÎÊý²»Ò»ÖÂ,²»¸Ã¾ªÑÈ.
¡ùµ±open()¼ì²âµ½´íÎóʱºò,ÓÉ·µ»Ø£1Öµ±íʾ.ÒòΪ´æÔÚÐí¶à²»Í¬µÄ²úÉú´íÎóµÄÌõ¼þ,ÓÉÄں˸³ÓèÍⲿÕûÐαäÁ¿errnoÏàÓ¦µÄÖµ£¬ÒÔ´ËÀ´Ö¸Ê¾·¢ÉúÁËʲô´íÎó
open()µ÷ÓõÄÖ÷Òª´íÎóÓУº
ENOENT ûÓй涨O_CREAT¾ÍÊÔͼ´ò¿ªÒ»¸ö²»´æÔÚµÄÎļþ
EEXIST ÀûÓÃO_CREAT|O_EXCLÇ¿ÖÆ´´½¨Ò»¸öÒѾ´æÔÚµÄÎļþ
EACCES ûÓиÃÎļþËùÐèÒªµÄ·ÃÎÊȨÏÞ,»òÕßûÓÐÎļþ·¾¶ÃûÖаüº¬µÄĿ¼µÄËÑË÷ȨÏÞ.
ÕâЩ·ûºÅͨ¹ý
¡òÈç¹ûûÓгöÏÖ´íÎó,´Óopen()µ÷Óõķµ»ØÖµÊǸöÎļþÃèÊö·û.ÔÚËæºó¶Ô¸ÃÎļþµÄËùÓвÙ×÷Öн«Ê¹ÓÃÕâ¸öÎļþÃèÊö·û.
ÎļþÃèÊö·û£º±¾ÉíÊǸöСµÄ·Ç¸ºÕûÊý,ʵ¼ÊÉÏÊǸöÖ¸Ïò´ò¿ªÎļþÃèÊöµÄÖ¸ÕëÊý×éµÄË÷Òý.µ±Ò»¸öÎļþÃèÊö·û±»·ÖÅäʱºò,½«ËÑË÷Õâ¸öÊý×éÒÔÕÒµ½µÚÒ»¸ö¿ÕÏеÄÔªËØ.½á¹ûÊǵ±´ò¿ªÒ»¸öÎļþʱºò,linux×ÜÊÇ·ÖÅä×îµÍ±àºÅµÄ¿ÕÏеÄÎļþÃèÊö·û.
ÒԺ󽫿´µ½£ÌÖÂÛÈçºÎʵÏÖÊäÈëÊä³öÖØÐ¶¨Ïòµ½ÎļþºÍ¹ÜµÀʱºò,½«µÃµ½ºÃµÄÀûÓÃ.
¡òÓеÄʱºòÊÔͼ´ò¿ªÒ»¸öÌØ¶¨µÄÎļþǰ,¿ÉÄÜÏ£Íû¼ìÑé½ø³ÌÊÇ·ñÒѾ·ÃÎʹý¸ÃÎļþ,¿ÉÒÔÓÃaccessv()ϵͳµ÷ÓÃÀ´Íê³É.access()ϵͳµ÷ÓõÄÒ»°ãÐÎʽÊÇ£º
#include
int access(char *pathname,int mode);
mode Êǰüº¬ÔÚÎļþ
R_OK ¼ìÑéµ÷Óýø³ÌÊÇ·ñÓйý¶Á·ÃÎÊ
W_OK ¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£Ð´·ÃÎÊ
X_OK ¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£Ö´ÐзÃÎÊ
F_OK ¼ìÑ鹿¶¨µÄÎļþÊÇ·ñ´æÔÚ

