?? linux 常用c函數(shù)(中文版)-文件權(quán)限控制.htm
字號:
<TD><FONT face=宋體 size=2><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>EBADF dir為無效的目錄流<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>#include<sys/types.h><BR>#include<dirent.h><BR>#include<unistd.h><BR>main()<BR>{<BR>DIR
* dir;<BR>struct dirent *ptr;<BR>dir = opendir(“/etc/rc.d”);<BR>while((ptr
= readdir(dir))!=NULL)<BR>{<BR>printf(“d_name
:%s\n”,ptr->d_name);<BR>}<BR>rewinddir(dir);<BR>printf(“readdir
again!\n”);<BR>while((ptr = readdir(dir))!=NULL)<BR>{<BR>printf(“d_name:
%s\n”,ptr->d_name);<BR>}<BR>closedir(dir);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>d_name:.<BR>d_name:..<BR>d_name:init.d<BR>d_name:rc0.d<BR>d_name:rc1.d<BR>d_name:rc2.d<BR>d_name:rc3.d<BR>d_name:rc4.d<BR>d_name:rc5.d<BR>d_name:rc6.d<BR>d_name:rc<BR>d_name:rc.local<BR>d_name:rc.sysinit<BR>readdir
again!<BR>d_name:.<BR>d_name:..<BR>d_name:init.d<BR>d_name:rc0.d<BR>d_name:rc1.d<BR>d_name:rc2.d<BR>d_name:rc3.d<BR>d_name:rc4.d<BR>d_name:rc5.d<BR>d_name:rc6.d<BR>d_name:rc<BR>d_name:rc.local<BR>d_name:rc.sysinit<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc232></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>seekdir(設(shè)置下回讀取目錄的位置) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>open,opendir,closedir,rewinddir,telldir,readdir,scandir<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<dirent.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>void seekdir(DIR * dir,off_t
offset);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>seekdir()用來設(shè)置參數(shù)dir目錄流目前的讀取位置,在調(diào)用readdir()時(shí)便從此新位置開始讀取。參數(shù)offset
代表距離目錄文件開頭的偏移量。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>EBADF 參數(shù)dir為無效的目錄流<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>#include<sys/types.h><BR>#include<dirent.h><BR>#include<unistd.h><BR>main()<BR>{<BR>DIR
* dir;<BR>struct dirent * ptr;<BR>int
offset,offset_5,i=0;<BR>dir=opendir(“/etc/rc.d”);<BR>while((ptr =
readdir(dir))!=NULL)<BR>{<BR>offset = telldir(dir);<BR>if(++i = =5)
offset_5 =offset;<BR>printf(“d_name :%s offset :%d
\n”,ptr->d_name,offset);<BR>}<BR>seekdir(dir
offset_5);<BR>printf(“Readdir again!\n”);<BR>while((ptr =
readdir(dir))!=NULL)<BR>{<BR>offset = telldir(dir);<BR>printf(“d_name :%s
offset
:%d\n”,ptr->d_name.offset);<BR>}<BR>closedir(dir);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>d_name : . offset :12<BR>d_name : ..
offset:24<BR>d_name : init.d offset 40<BR>d_name : rc0.d offset
:56<BR>d_name :rc1.d offset :72<BR>d_name:rc2.d offset :88<BR>d_name:rc3.d
offset 104<BR>d_name:rc4.d offset:120<BR>d_name:rc5.d
offset:136<BR>d_name:rc6.d offset:152<BR>d_name:rc offset
164<BR>d_name:rc.local offset :180<BR>d_name:rc.sysinit offset
:4096<BR>readdir again!<BR>d_name:rc2.d offset :88<BR>d_name:rc3.d offset
104<BR>d_name:rc4.d offset:120<BR>d_name:rc5.d offset:136<BR>d_name:rc6.d
offset:152<BR>d_name:rc offset 164<BR>d_name:rc.local offset
:180<BR>d_name:rc.sysinit offset :4096<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc233></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>stat(取得文件狀態(tài)) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>fstat,lstat,chmod,chown,readlink,utime<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>#include<sys/stat.h><BR>#include<unistd.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>int stat(const char * file_name,struct stat
*buf);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>stat()用來將參數(shù)file_name所指的文件狀態(tài),復(fù)制到參數(shù)buf所指的結(jié)構(gòu)中。<BR>下面是struct
stat內(nèi)各參數(shù)的說明<BR>struct stat<BR>{<BR>dev_t st_dev; /*device*/<BR>ino_t
st_ino; /*inode*/<BR>mode_t st_mode; /*protection*/<BR>nlink_t st_nlink;
/*number of hard links */<BR>uid_t st_uid; /*user ID of owner*/<BR>gid_t
st_gid; /*group ID of owner*/<BR>dev_t st_rdev; /*device type */<BR>off_t
st_size; /*total size, in bytes*/<BR>unsigned long st_blksize; /*blocksize
for filesystem I/O */<BR>unsigned long st_blocks; /*number of blocks
allocated*/<BR>time_t st_atime; /* time of lastaccess*/<BR>time_t
st_mtime; /* time of last modification */<BR>time_t st_ctime; /* time of
last change */<BR>};<BR>st_dev 文件的設(shè)備編號<BR>st_ino 文件的i-node<BR>st_mode
文件的類型和存取的權(quán)限<BR>st_nlink 連到該文件的硬連接數(shù)目,剛建立的文件值為1。<BR>st_uid
文件所有者的用戶識別碼<BR>st_gid 文件所有者的組識別碼<BR>st_rdev 若此文件為裝置設(shè)備文件,則為其設(shè)備編號<BR>st_size
文件大小,以字節(jié)計(jì)算<BR>st_blksize 文件系統(tǒng)的I/O 緩沖區(qū)大小。<BR>st_blcoks 占用文件區(qū)塊的個(gè)數(shù),每一區(qū)塊大小為512
個(gè)字節(jié)。<BR>st_atime
文件最近一次被存取或被執(zhí)行的時(shí)間,一般只有在用mknod、utime、read、write與tructate時(shí)改變。<BR>st_mtime
文件最后一次被修改的時(shí)間,一般只有在用mknod、utime和write時(shí)才會(huì)改變<BR>st_ctime
i-node最近一次被更改的時(shí)間,此參數(shù)會(huì)在文件所有者、組、權(quán)限被更改時(shí)更新先前所描述的st_mode 則定義了下列數(shù)種情況<BR>S_IFMT
0170000 文件類型的位遮罩<BR>S_IFSOCK 0140000 scoket<BR>S_IFLNK 0120000
符號連接<BR>S_IFREG 0100000 一般文件<BR>S_IFBLK 0060000 區(qū)塊裝置<BR>S_IFDIR 0040000
目錄<BR>S_IFCHR 0020000 字符裝置<BR>S_IFIFO 0010000 先進(jìn)先出<BR>S_ISUID 04000
文件的(set user-id on execution)位<BR>S_ISGID 02000 文件的(set group-id on
execution)位<BR>S_ISVTX 01000 文件的sticky位<BR>S_IRUSR(S_IREAD) 00400
文件所有者具可讀取權(quán)限<BR>S_IWUSR(S_IWRITE)00200 文件所有者具可寫入權(quán)限<BR>S_IXUSR(S_IEXEC)
00100 文件所有者具可執(zhí)行權(quán)限<BR>S_IRGRP 00040 用戶組具可讀取權(quán)限<BR>S_IWGRP 00020
用戶組具可寫入權(quán)限<BR>S_IXGRP 00010 用戶組具可執(zhí)行權(quán)限<BR>S_IROTH 00004
其他用戶具可讀取權(quán)限<BR>S_IWOTH 00002 其他用戶具可寫入權(quán)限<BR>S_IXOTH 00001
其他用戶具可執(zhí)行權(quán)限<BR>上述的文件類型在POSIX 中定義了檢查這些類型的宏定義<BR>S_ISLNK (st_mode)
判斷是否為符號連接<BR>S_ISREG (st_mode) 是否為一般文件<BR>S_ISDIR
(st_mode)是否為目錄<BR>S_ISCHR (st_mode)是否為字符裝置文件<BR>S_ISBLK (s3e)
是否為先進(jìn)先出<BR>S_ISSOCK (st_mode) 是否為socket<BR>若一目錄具有sticky
位(S_ISVTX),則表示在此目錄下的文件只能被該文件所有者、此目錄所有者或root來刪除或改名。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>執(zhí)行成功則返回0,失敗返回-1,錯(cuò)誤代碼存于errno<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>ENOENT 參數(shù)file_name指定的文件不存在<BR>ENOTDIR
路徑中的目錄存在但卻非真正的目錄<BR>ELOOP 欲打開的文件有過多符號連接問題,上限為16符號連接<BR>EFAULT
參數(shù)buf為無效指針,指向無法存在的內(nèi)存空間<BR>EACCESS 存取文件時(shí)被拒絕<BR>ENOMEM
核心內(nèi)存不足<BR>ENAMETOOLONG 參數(shù)file_name的路徑名稱太長<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>#include<sys/stat.h><BR>#include<unistd.h><BR>mian()<BR>{<BR>struct
stat buf;<BR>stat (“/etc/passwd”,&buf);<BR>printf(“/etc/passwd file
size = %d \n”,buf.st_size);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>/etc/passwd file size = 705<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc234></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>symlink(建立文件符號連接) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>link,unlink<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<unistd.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>int symlink( const char * oldpath,const char *
newpath);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>symlink()以參數(shù)newpath指定的名稱來建立一個(gè)新的連接(符號連接)到參數(shù)oldpath所指定的已存在文件。參數(shù)oldpath指定的文件不一定要存在,如果參數(shù)newpath指定的名稱為一已存在的文件則不會(huì)建立連接。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>成功則返回0,失敗返回-1,錯(cuò)誤原因存于errno。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>EPERM 參數(shù)oldpath與newpath所指的文件系統(tǒng)不支持符號連接<BR>EROFS
欲測試寫入權(quán)限的文件存在于只讀文件系統(tǒng)內(nèi)<BR>EFAULT
參數(shù)oldpath或newpath指針超出可存取內(nèi)存空間。<BR>ENAMETOOLONG
參數(shù)oldpath或newpath太長<BR>ENOMEM 核心內(nèi)存不足<BR>EEXIST
參數(shù)newpath所指的文件名已存在。<BR>EMLINK 參數(shù)oldpath所指的文件已達(dá)到最大連接數(shù)目<BR>ELOOP
參數(shù)pathname有過多符號連接問題<BR>ENOSPC 文件系統(tǒng)的剩余空間不足<BR>EIO I/O 存取錯(cuò)誤<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>#include<unistd.h><BR>main()<BR>{<BR>symlink(“/etc/passwd”,”pass”);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc235></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>telldir(取得目錄流的讀取位置) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>open,opendir,closedir,rewinddir,seekdir,readdir,scandir<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -