Linux文件操作函数.docx
《Linux文件操作函数.docx》由会员分享,可在线阅读,更多相关《Linux文件操作函数.docx(6页珍藏版)》请在冰豆网上搜索。
Linux文件操作函数
linuxread/writeºÍfread/fwriteÓÐʲôÇø±ð
1,freadÊÇ´ø»º³åµÄ,read²»´ø»º³å.
2,fopenÊDZê×¼cÀﶨÒåµÄ,openÊÇPOSIXÖж¨ÒåµÄ.
3,fread¿ÉÒÔ¶ÁÒ»¸ö½á¹¹.readÔÚlinux/unixÖжÁ¶þ½øÖÆÓëÆÕͨÎļþûÓÐÇø±ð.
4,fopen²»ÄÜÖ¸¶¨Òª´´½¨ÎļþµÄȨÏÞ.open¿ÉÒÔÖ¸¶¨È¨ÏÞ.
5,fopen·µ»ØÖ¸Õë,open·µ»ØÎļþÃèÊö·û(ÕûÊý).
6,linux/unixÖÐÈκÎÉ豸¶¼ÊÇÎļþ,¶¼¿ÉÒÔÓÃopen,read.
Èç¹ûÎļþµÄ´óСÊÇ8k¡£
ÄãÈç¹ûÓÃread/write£¬ÇÒÖ»·ÖÅäÁË2kµÄ»º´æ£¬ÔòÒª½«´ËÎļþ¶Á³öÐèÒª×ö4´Îϵͳµ÷ÓÃÀ´Êµ¼Ê´Ó´ÅÅÌÉ϶Á³ö¡£
Èç¹ûÄãÓÃfread/fwrite£¬Ôòϵͳ×Ô¶¯·ÖÅ仺´æ£¬Ôò¶Á³ö´ËÎļþÖ»ÒªÒ»´Îϵͳµ÷ÓôӴÅÅÌÉ϶Á³ö¡£
Ò²¾ÍÊÇÓÃread/writeÒª¶Á4´Î´ÅÅÌ£¬¶øÓÃfread/fwriteÔòÖ»Òª¶Á1´Î´ÅÅÌ¡£Ð§ÂʱÈread/writeÒª¸ß4±¶¡£
Èç¹û³ÌÐò¶ÔÄÚ´æÓÐÏÞÖÆ£¬ÔòÓÃread/write±È½ÏºÃ¡£
¶¼ÓÃfreadºÍfwrite,Ëü×Ô¶¯·ÖÅ仺´æ,ËٶȻáºÜ¿ì,±È×Ô¼ºÀ´×öÒª¼òµ¥¡£Èç¹ûÒª´¦ÀíһЩÌØÊâµÄÃèÊö·û,ÓÃreadºÍwrite,ÈçÌ×½Ó¿Ú,¹ÜµÀÖ®ÀàµÄ
ϵͳµ÷ÓÃwriteµÄЧÂÊÈ¡¾öÓÚÄãbufµÄ´óСºÍÄãҪдÈëµÄ×ÜÊýÁ¿£¬Èç¹ûbuf̫С£¬Äã½øÈëÄں˿ռäµÄ´ÎÊý´óÔö£¬Ð§Âʾ͵ÍÏ¡£¶øfwrite»áÌæÄã×ö»º´æ£¬¼õÉÙÁËʵ¼Ê³öÏÖµÄϵͳµ÷Óã¬ËùÒÔЧÂʱȽϸߡ£
Èç¹ûÖ»µ÷ÓÃÒ»´Î(¿ÉÄÜÂð?
)£¬ÕâÁ©²î²»¶à£¬ÑϸñÀ´ËµwriteÒª¿ìÒ»µãµã(ÒòΪʵ¼ÊÉÏfwrite×îºó»¹ÊÇÓÃÁËwrite×öÕæÕýµÄдÈëÎļþϵͳ¹¤×÷)£¬µ«ÊÇÕâÆäÖеIJî±ðÎÞËùν¡£
open£¨´ò¿ªÎļþ£©
Ïà¹Øº¯Êý
read£¬write£¬fcntl£¬close£¬link£¬stat£¬umask£¬unlink£¬fopen
±íÍ·Îļþ
#include
#include
#include
¶¨Ò庯Êý
intopen(constchar*pathname,intflags);
intopen(constchar*pathname,intflags,mode_tmode);
º¯Êý˵Ã÷
²ÎÊýpathnameÖ¸ÏòÓû´ò¿ªµÄÎļþ·¾¶×Ö·û´®¡£ÏÂÁÐÊDzÎÊýflagsËùÄÜʹÓõÄÆì±ê:
O_RDONLYÒÔÖ»¶Á·½Ê½´ò¿ªÎļþ
O_WRONLYÒÔֻд·½Ê½´ò¿ªÎļþ
O_RDWRÒԿɶÁд·½Ê½´ò¿ªÎļþ¡£ÉÏÊöÈýÖÖÆì±êÊÇ»¥³âµÄ£¬Ò²¾ÍÊDz»¿ÉͬʱʹÓ㬵«¿ÉÓëÏÂÁеÄÆì±êÀûÓÃOR(|)ÔËËã·û×éºÏ¡£
O_CREATÈôÓû´ò¿ªµÄÎļþ²»´æÔÚÔò×Ô¶¯½¨Á¢¸ÃÎļþ¡£
O_EXCLÈç¹ûO_CREATÒ²±»ÉèÖ㬴ËÖ¸Áî»áÈ¥¼ì²éÎļþÊÇ·ñ´æÔÚ¡£ÎļþÈô²»´æÔÚÔò½¨Á¢¸ÃÎļþ£¬·ñÔò½«µ¼Ö´ò¿ªÎļþ´íÎó¡£´ËÍ⣬ÈôO_CREATÓëO_EXCLͬʱÉèÖ㬲¢ÇÒÓû´ò¿ªµÄÎļþΪ·ûºÅÁ¬½Ó£¬Ôò»á´ò¿ªÎļþʧ°Ü¡£
O_NOCTTYÈç¹ûÓû´ò¿ªµÄÎļþΪÖն˻úÉ豸ʱ£¬Ôò²»»á½«¸ÃÖն˻úµ±³É½ø³Ì¿ØÖÆÖն˻ú¡£
O_TRUNCÈôÎļþ´æÔÚ²¢ÇÒÒÔ¿ÉдµÄ·½Ê½´ò¿ªÊ±£¬´ËÆì±ê»áÁîÎļþ³¤¶ÈÇåΪ0£¬¶øÔÀ´´æÓÚ¸ÃÎļþµÄ×ÊÁÏÒ²»áÏûʧ¡£
O_APPENDµ±¶ÁдÎļþʱ»á´ÓÎļþβ¿ªÊ¼Òƶ¯£¬Ò²¾ÍÊÇËùдÈëµÄÊý¾Ý»áÒÔ¸½¼ÓµÄ·½Ê½¼ÓÈëµ½ÎļþºóÃæ¡£
O_NONBLOCKÒÔ²»¿É×è¶ÏµÄ·½Ê½´ò¿ªÎļþ£¬Ò²¾ÍÊÇÎÞÂÛÓÐÎÞÊý¾Ý¶ÁÈ¡»òµÈ´ý£¬¶¼»áÁ¢¼´·µ»Ø½ø³ÌÖ®ÖС£
O_NDELAYͬO_NONBLOCK¡£
O_SYNCÒÔͬ²½µÄ·½Ê½´ò¿ªÎļþ¡£
O_NOFOLLOWÈç¹û²ÎÊýpathnameËùÖ¸µÄÎļþΪһ·ûºÅÁ¬½Ó£¬Ôò»áÁî´ò¿ªÎļþʧ°Ü¡£
O_DIRECTORYÈç¹û²ÎÊýpathnameËùÖ¸µÄÎļþ²¢·ÇΪһĿ¼£¬Ôò»áÁî´ò¿ªÎļþʧ°Ü¡£
´ËΪLinux2.2ÒÔºóÌØÓеÄÆì±ê£¬ÒÔ±ÜÃâһЩϵͳ°²È«ÎÊÌâ¡£²ÎÊýmodeÔòÓÐÏÂÁÐÊýÖÖ×éºÏ£¬Ö»ÓÐÔÚ½¨Á¢ÐÂÎļþʱ²Å»áÉúЧ£¬´ËÍâÕæÕý½¨ÎļþʱµÄȨÏÞ»áÊܵ½umaskÖµËùÓ°Ï죬Òò´Ë¸ÃÎļþȨÏÞÓ¦¸ÃΪ£¨mode-umaks£©¡£
S_IRWXU£¬00700ȨÏÞ£¬´ú±í¸ÃÎļþËùÓÐÕß¾ßÓпɶÁ¡¢¿Éд¼°¿ÉÖ´ÐеÄȨÏÞ¡£
S_IRUSR»òS_IREAD£¬00400ȨÏÞ£¬´ú±í¸ÃÎļþËùÓÐÕß¾ßÓпɶÁÈ¡µÄȨÏÞ¡£
S_IWUSR»òS_IWRITE£¬00200ȨÏÞ£¬´ú±í¸ÃÎļþËùÓÐÕß¾ßÓпÉдÈëµÄȨÏÞ¡£
S_IXUSR»òS_IEXEC£¬00100ȨÏÞ£¬´ú±í¸ÃÎļþËùÓÐÕß¾ßÓпÉÖ´ÐеÄȨÏÞ¡£
S_IRWXG00070ȨÏÞ£¬´ú±í¸ÃÎļþÓû§×é¾ßÓпɶÁ¡¢¿Éд¼°¿ÉÖ´ÐеÄȨÏÞ¡£
S_IRGRP00040ȨÏÞ£¬´ú±í¸ÃÎļþÓû§×é¾ßÓпɶÁµÄȨÏÞ¡£
S_IWGRP00020ȨÏÞ£¬´ú±í¸ÃÎļþÓû§×é¾ßÓпÉдÈëµÄȨÏÞ¡£
S_IXGRP00010ȨÏÞ£¬´ú±í¸ÃÎļþÓû§×é¾ßÓпÉÖ´ÐеÄȨÏÞ¡£
S_IRWXO00007ȨÏÞ£¬´ú±íÆäËûÓû§¾ßÓпɶÁ¡¢¿Éд¼°¿ÉÖ´ÐеÄȨÏÞ¡£
S_IROTH00004ȨÏÞ£¬´ú±íÆäËûÓû§¾ßÓпɶÁµÄȨÏÞ
S_IWOTH00002ȨÏÞ£¬´ú±íÆäËûÓû§¾ßÓпÉдÈëµÄȨÏÞ¡£
S_IXOTH00001ȨÏÞ£¬´ú±íÆäËûÓû§¾ßÓпÉÖ´ÐеÄȨÏÞ¡£
·µ»ØÖµ
ÈôËùÓÐÓûºË²éµÄȨÏÞ¶¼Í¨¹ýÁ˼ì²éÔò·µ»Ø0Öµ£¬±íʾ³É¹¦£¬Ö»ÒªÓÐÒ»¸öȨÏÞ±»½ûÖ¹Ôò·µ»Ø-1¡£
´íÎó´úÂë
EEXIST²ÎÊýpathnameËùÖ¸µÄÎļþÒÑ´æÔÚ£¬È´Ê¹ÓÃÁËO_CREATºÍO_EXCLÆì±ê¡£
EACCESS²ÎÊýpathnameËùÖ¸µÄÎļþ²»·ûºÏËùÒªÇó²âÊÔµÄȨÏÞ¡£
EROFSÓû²âÊÔдÈëȨÏÞµÄÎļþ´æÔÚÓÚÖ»¶ÁÎļþϵͳÄÚ¡£
EFAULT²ÎÊýpathnameÖ¸Õ볬³ö¿É´æÈ¡ÄÚ´æ¿Õ¼ä¡£
EINVAL²ÎÊýmode²»ÕýÈ·¡£
ENAMETOOLONG²ÎÊýpathnameÌ«³¤¡£
ENOTDIR²ÎÊýpathname²»ÊÇĿ¼¡£
ENOMEMºËÐÄÄÚ´æ²»×ã¡£
ELOOP²ÎÊýpathnameÓйý¶à·ûºÅÁ¬½ÓÎÊÌâ¡£
EIOI/O´æÈ¡´íÎó¡£
¸½¼Ó˵Ã÷ʹÓÃaccess()×÷Óû§ÈÏÖ¤·½ÃæµÄÅжÏÒªÌرðСÐÄ£¬ÀýÈçÔÚaccess()ºóÔÙ×÷open()¿ÕÎļþ¿ÉÄÜ»áÔì³Éϵͳ°²È«ÉϵÄÎÊÌâ¡£
·¶Àý
#include
#include
#include
#include
main()
{
intfd,size;
chars[]=”LinuxProgrammer!
\n”,buffer[80];
fd=open(“/tmp/temp”,O_WRONLY|O_CREAT);
write(fd,s,sizeof(s));
close(fd);
fd=open(“/tmp/temp”,O_RDONLY);
size=read(fd,buffer,sizeof(buffer));
close(fd);
printf(“%s”,buffer);
}
Ö´ÐÐLinuxProgrammer!
read£¨ÓÉÒÑ´ò¿ªµÄÎļþ¶ÁÈ¡Êý¾Ý£©
Ïà¹Øº¯Êýreaddir£¬write£¬fcntl£¬close£¬lseek£¬readlink£¬fread
±íÍ·Îļþ#include
¶¨Ò庯Êý
ssize_tread(intfd,void*buf,size_tcount);
º¯Êý˵Ã÷read()»á°Ñ²ÎÊýfdËùÖ¸µÄÎļþ´«ËÍcount¸ö×Ö½Úµ½bufÖ¸ÕëËùÖ¸µÄÄÚ´æÖС£Èô²ÎÊýcountΪ0£¬Ôòread()²»»áÓÐ×÷Óò¢·µ»Ø0¡£·µ»ØֵΪʵ¼Ê¶ÁÈ¡µ½µÄ×Ö½ÚÊý£¬Èç¹û·µ»Ø0£¬±íʾÒѵ½´ïÎļþβ»òÊÇÎ޿ɶÁÈ¡µÄÊý¾Ý£¬´ËÍâÎļþ¶ÁдλÖûáËæ¶ÁÈ¡µ½µÄ×Ö½ÚÒƶ¯¡£
¸½¼Ó˵Ã÷Èç¹û˳Àûread()»á·µ»Øʵ¼Ê¶Áµ½µÄ×Ö½ÚÊý£¬×îºÃÄܽ«·µ»ØÖµÓë²ÎÊýcount×÷±È½Ï£¬Èô·µ»ØµÄ×Ö½ÚÊý±ÈÒªÇó¶ÁÈ¡µÄ×Ö½ÚÊýÉÙ£¬ÔòÓпÉÄܶÁµ½ÁËÎļþβ¡¢´Ó¹ÜµÀ(pipe)»òÖն˻ú¶ÁÈ¡£¬»òÕßÊÇread()±»ÐźÅÖжÏÁ˶ÁÈ¡¶¯×÷¡£µ±ÓдíÎó·¢ÉúʱÔò·µ»Ø-1£¬´íÎó´úÂë´æÈëerrnoÖУ¬¶øÎļþ¶ÁдλÖÃÔòÎÞ·¨Ô¤ÆÚ¡£
´íÎó´úÂëEINTR´Ëµ÷Óñ»ÐźÅËùÖжϡ£
EAGAINµ±Ê¹Óò»¿É×è¶ÏI/Oʱ£¨O_NONBLOCK£©£¬ÈôÎÞÊý¾Ý¿É¶ÁÈ¡Ôò·µ»Ø´ËÖµ¡£
EBADF²ÎÊýfd·ÇÓÐЧµÄÎļþÃèÊö´Ê£¬»ò¸ÃÎļþÒѹرա£
·¶Àý²Î¿¼open£¨£©¡£
write£¨½«Êý¾ÝдÈëÒÑ´ò¿ªµÄÎļþÄÚ£©
Ïà¹Øº¯Êýopen£¬read£¬fcntl£¬close£¬lseek£¬sync£¬fsync£¬fwrite
±íÍ·Îļþ#include
¶¨Ò庯Êý
ssize_twrite(intfd,constvoid*buf,size_tcount);
º¯Êý˵Ã÷write()»á°Ñ²ÎÊýbufËùÖ¸µÄÄÚ´æдÈëcount¸ö×Ö½Úµ½²ÎÊýfdËùÖ¸µÄÎļþÄÚ¡£µ±È»£¬Îļþ¶ÁдλÖÃÒ²»áËæÖ®Òƶ¯¡£
·µ»ØÖµÈç¹û˳Àûwrite()»á·µ»Øʵ¼ÊдÈëµÄ×Ö½ÚÊý¡£µ±ÓдíÎó·¢ÉúʱÔò·µ»Ø-1£¬´íÎó´úÂë´æÈëerrnoÖС£
´íÎó´úÂëEINTR´Ëµ÷Óñ»ÐźÅËùÖжϡ£
EAGAINµ±Ê¹Óò»¿É×è¶ÏI/Oʱ£¨O_NONBLOCK£©£¬ÈôÎÞÊý¾Ý¿É¶ÁÈ¡Ôò·µ»Ø´ËÖµ¡£
EADF²ÎÊýfd·ÇÓÐЧµÄÎļþÃèÊö´Ê£¬»ò¸ÃÎļþÒѹرա£
·¶ÀýÇë²Î¿¼open£¨£©¡£
sync£¨½«»º³åÇøÊý¾Ýд»Ø´ÅÅÌ£©
Ïà¹Øº¯Êýfsync
±íÍ·Îļþ#include
¶¨Ò庯Êýintsync(void)
º¯Êý˵Ã÷sync()¸ºÔð½«ÏµÍ³»º³åÇøÊý¾Ýд»Ø´ÅÅÌ£¬ÒÔÈ·±£Êý¾Ýͬ²½¡£
·µ»ØÖµ·µ»Ø0¡£
fopen£¨´ò¿ªÎļþ£©
Ïà¹Øº¯Êý
open£¬fclose
±íÍ·Îļþ
#include
¶¨Ò庯Êý
FILE*fopen(constchar*path,constchar*mode);
º¯Êý˵Ã÷
²ÎÊýpath×Ö·û´®°üº¬Óû´ò¿ªµÄÎļþ·¾¶¼°ÎļþÃû£¬²ÎÊýmode×Ö·û´®Ôò´ú±í×ÅÁ÷ÐÎ̬¡£
modeÓÐÏÂÁм¸ÖÖÐÎ̬×Ö·û´®:
r´ò¿ªÖ»¶ÁÎļþ£¬¸ÃÎļþ±ØÐë´æÔÚ¡£
r+´ò¿ª¿É¶ÁдµÄÎļþ£¬¸ÃÎļþ±ØÐë´æÔÚ¡£
w´ò¿ªÖ»Ð´Îļþ£¬ÈôÎļþ´æÔÚÔòÎļþ³¤¶ÈÇåΪ0£¬¼´¸ÃÎļþÄÚÈÝ»áÏûʧ¡£ÈôÎļþ²»´æÔÚÔò½¨Á¢¸ÃÎļþ¡£
w+´ò¿ª¿É¶ÁдÎļþ£¬ÈôÎļþ´æÔÚÔòÎļþ³¤¶ÈÇåΪÁ㣬¼´¸ÃÎļþÄÚÈÝ»áÏûʧ¡£ÈôÎļþ²»´æÔÚÔò½¨Á¢¸ÃÎļþ¡£
aÒÔ¸½¼ÓµÄ·½Ê½´ò¿ªÖ»Ð´Îļþ¡£ÈôÎļþ²»´æÔÚ£¬Ôò»á½¨Á¢¸ÃÎļþ£¬Èç¹ûÎļþ´æÔÚ£¬Ð´ÈëµÄÊý¾Ý»á±»¼Óµ½Îļþ⣬¼´ÎļþÔÏȵÄÄÚÈݻᱻ±£Áô¡£
a+ÒÔ¸½¼Ó·½Ê½´ò¿ª¿É¶ÁдµÄÎļþ¡£ÈôÎļþ²»´æÔÚ£¬Ôò»á½¨Á¢¸ÃÎļþ£¬Èç¹ûÎļþ´æÔÚ£¬Ð´ÈëµÄÊý¾Ý»á±»¼Óµ½Îļþβºó£¬¼´ÎļþÔÏȵÄÄÚÈݻᱻ±£Áô¡£
ÉÏÊöµÄÐÎ̬×Ö·û´®¶¼¿ÉÒÔÔÙ¼ÓÒ»¸öb×Ö·û£¬Èçrb¡¢w+b»òab£«µÈ×éºÏ£¬¼ÓÈëb×Ö·ûÓÃÀ´¸æËߺ¯Êý¿â´ò¿ªµÄÎļþΪ¶þ½øÖÆÎļþ£¬¶ø·Ç´¿ÎÄ×ÖÎļþ¡£²»¹ýÔÚPOSIXϵͳ£¬°üº¬Linux¶¼»áºöÂÔ¸Ã×Ö·û¡£ÓÉfopen()Ëù½¨Á¢µÄÐÂÎļþ»á¾ßÓÐS_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)ȨÏÞ£¬´ËÎļþȨÏÞÒ²»á²Î¿¼umaskÖµ¡£
·µ»ØÖµ
Îļþ˳Àû´ò¿ªºó£¬Ö¸Ïò¸ÃÁ÷µÄÎļþÖ¸Õë¾Í»á±»·µ»Ø¡£Èô¹ûÎļþ´ò¿ªÊ§°ÜÔò·µ»ØNULL£¬²¢°Ñ´íÎó´úÂë´æÔÚerrnoÖС£
¸½¼Ó˵Ã÷
Ò»°ã¶øÑÔ£¬´ò¿ªÎļþºó»á×÷һЩÎļþ¶ÁÈ¡»òдÈëµÄ¶¯×÷£¬Èô¿ªÎļþʧ°Ü£¬½ÓÏÂÀ´µÄ¶Áд¶¯×÷Ò²ÎÞ·¨Ë³Àû½øÐУ¬ËùÒÔÔÚfopen()ºóÇë×÷´íÎóÅжϼ°´¦Àí¡£