?? linux 常用c函數(shù)(中文版)-文件權(quán)限控制.htm
字號(hào):
進(jìn)程的有效用戶識(shí)別碼與欲修改權(quán)限的文件所有者不同,而且也不具root權(quán)限,或是參數(shù)owner、group不正確。<BR>EROFS
欲寫(xiě)入的文件存在于只讀文件系統(tǒng)內(nèi)。<BR>ENOENT 指定的文件不存在<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<sys/types.h><BR>#include<unistd.h><BR>#include<fcntl.h><BR>main()<BR>{<BR>int
fd;<BR>fd = open
(“/etc/passwd”,O_RDONLY);<BR>chown(fd,0,0);<BR>close(fd);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc221></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>fstat(由文件描述詞取得文件狀態(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>stat,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 fstat(int fildes,struct stat
*buf);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說(shuō)明 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>fstat()用來(lái)將參數(shù)fildes所指的文件狀態(tài),復(fù)制到參數(shù)buf所指的結(jié)構(gòu)中(struct
stat)。Fstat()與stat()作用完全相同,不同處在于傳入的參數(shù)為已打開(kāi)的文件描述詞。詳細(xì)內(nèi)容請(qǐng)參考stat()。<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>范例 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>#include<sys/stat.h><BR>#include<unistd.h><BR>#include<fcntk.h><BR>main()<BR>{<BR>struct
stat buf;<BR>int fd;<BR>fd = open
(“/etc/passwd”,O_RDONLY);<BR>fstat(fd,&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=linuxc222></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>ftruncate(改變文件大小) </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,truncate<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 ftruncate(int fd,off_t
length);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說(shuō)明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>ftruncate()會(huì)將參數(shù)fd指定的文件大小改為參數(shù)length指定的大小。參數(shù)fd為已打開(kāi)的文件描述詞,而且必須是以寫(xiě)入模式打開(kāi)的文件。如果原來(lái)的文件大小比參數(shù)length大,則超過(guò)的部分會(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>執(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>EBADF 參數(shù)fd文件描述詞為無(wú)效的或該文件已關(guān)閉。<BR>EINVAL 參數(shù)fd
為一socket 并非文件,或是該文件并非以寫(xiě)入模式打開(kāi)。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc223></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>getcwd(取得當(dāng)前的工作目錄) </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>get_current_dir_name,getwd,chdir<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>char * getcwd(char * buf,size_t
size);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說(shuō)明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>getcwd()會(huì)將當(dāng)前的工作目錄絕對(duì)路徑復(fù)制到參數(shù)buf所指的內(nèi)存空間,參數(shù)size為buf的空間大小。在調(diào)用此函數(shù)時(shí),buf所指的內(nèi)存空間要足夠大,若工作目錄絕對(duì)路徑的字符串長(zhǎng)度超過(guò)參數(shù)size大小,則回值NULL,errno的值則為ERANGE。倘若參數(shù)buf為NULL,getcwd()會(huì)依參數(shù)size的大小自動(dòng)配置內(nèi)存(使用malloc()),如果參數(shù)size也為0,則getcwd()會(huì)依工作目錄絕對(duì)路徑的字符串程度來(lái)決定所配置的內(nèi)存大小,進(jìn)程可以在使用完此字符串后利用free()來(lái)釋放此空間。<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í)行成功則將結(jié)果復(fù)制到參數(shù)buf所指的內(nèi)存空間,或是返回自動(dòng)配置的字符串指針。失敗返回NULL,錯(cuò)誤代碼存于errno。<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>char
buf[80];<BR>getcwd(buf,sizeof(buf));<BR>printf(“current working directory
: %s\n”,buf);<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>current working directory :/tmp<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc224></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>link(建立文件連接) </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>symlink,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 link (const char * oldpath,const char *
newpath);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說(shuō)明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>link()以參數(shù)newpath指定的名稱(chēng)來(lái)建立一個(gè)新的連接(硬連接)到參數(shù)oldpath所指定的已存在文件。如果參數(shù)newpath指定的名稱(chēng)為一已存在的文件則不會(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>附加說(shuō)明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>link()所建立的硬連接無(wú)法跨越不同文件系統(tǒng),如果需要請(qǐng)改用symlink()。<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>EXDEV 參數(shù)oldpath與newpath不是建立在同一文件系統(tǒng)。<BR>EPERM
參數(shù)oldpath與newpath所指的文件系統(tǒng)不支持硬連接<BR>EROFS 文件存在于只讀文件系統(tǒng)內(nèi)<BR>EFAULT
參數(shù)oldpath或newpath 指針超出可存取內(nèi)存空間。<BR>ENAMETOLLONG
參數(shù)oldpath或newpath太長(zhǎng)<BR>ENOMEM 核心內(nèi)存不足<BR>EEXIST
參數(shù)newpath所指的文件名已存在。<BR>EMLINK 參數(shù)oldpath所指的文件已達(dá)最大連接數(shù)目。<BR>ELOOP
參數(shù)pathname有過(guò)多符號(hào)連接問(wèn)題<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>/* 建立/etc/passwd 的硬連接為pass
*/<BR>#include<unistd.h><BR>main()<BR>{<BR>link(“/etc/passwd”,”pass”);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc225></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>lstat(由文件描述詞取得文件狀態(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>stat,fstat,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 lstat (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ù)說(shuō)明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>lstat()與stat()作用完全相同,都是取得參數(shù)file_name所指的文件狀態(tài),其差別在于,當(dāng)文件為符號(hào)連接時(shí),lstat()會(huì)返回該link本身的狀態(tài)。詳細(xì)內(nèi)容請(qǐng)參考stat()。<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>范例 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>參考stat()。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc226></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>opendir(打開(kāi)目錄) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -