?? 12.htm
字號:
進程的有效用戶識別碼與欲修改權限的文件所有者不同,而且也不具root權限,或是參數owner、group不正確。<BR>EROFS
欲寫入的文件存在于只讀文件系統內。<BR>ENOENT 指定的文件不存在<BR>EIO I/O存取錯誤<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(由文件描述詞取得文件狀態) </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,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>定義函數 </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>函數說明 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>fstat()用來將參數fildes所指的文件狀態,復制到參數buf所指的結構中(struct
stat)。Fstat()與stat()作用完全相同,不同處在于傳入的參數為已打開的文件描述詞。詳細內容請參考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>執行成功則返回0,失敗返回-1,錯誤代碼存于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>執行 </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>相關函數 </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>定義函數 </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>函數說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>ftruncate()會將參數fd指定的文件大小改為參數length指定的大小。參數fd為已打開的文件描述詞,而且必須是以寫入模式打開的文件。如果原來的文件大小比參數length大,則超過的部分會被刪去。<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,錯誤原因存于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>EBADF 參數fd文件描述詞為無效的或該文件已關閉。<BR>EINVAL 參數fd
為一socket 并非文件,或是該文件并非以寫入模式打開。<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(取得當前的工作目錄) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數 </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>定義函數 </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>函數說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>getcwd()會將當前的工作目錄絕對路徑復制到參數buf所指的內存空間,參數size為buf的空間大小。在調用此函數時,buf所指的內存空間要足夠大,若工作目錄絕對路徑的字符串長度超過參數size大小,則回值NULL,errno的值則為ERANGE。倘若參數buf為NULL,getcwd()會依參數size的大小自動配置內存(使用malloc()),如果參數size也為0,則getcwd()會依工作目錄絕對路徑的字符串程度來決定所配置的內存大小,進程可以在使用完此字符串后利用free()來釋放此空間。<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>執行成功則將結果復制到參數buf所指的內存空間,或是返回自動配置的字符串指針。失敗返回NULL,錯誤代碼存于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>執行 </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>相關函數 </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>定義函數 </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>函數說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>link()以參數newpath指定的名稱來建立一個新的連接(硬連接)到參數oldpath所指定的已存在文件。如果參數newpath指定的名稱為一已存在的文件則不會建立連接。<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,錯誤原因存于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>link()所建立的硬連接無法跨越不同文件系統,如果需要請改用symlink()。<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>EXDEV 參數oldpath與newpath不是建立在同一文件系統。<BR>EPERM
參數oldpath與newpath所指的文件系統不支持硬連接<BR>EROFS 文件存在于只讀文件系統內<BR>EFAULT
參數oldpath或newpath 指針超出可存取內存空間。<BR>ENAMETOLLONG
參數oldpath或newpath太長<BR>ENOMEM 核心內存不足<BR>EEXIST
參數newpath所指的文件名已存在。<BR>EMLINK 參數oldpath所指的文件已達最大連接數目。<BR>ELOOP
參數pathname有過多符號連接問題<BR>ENOSPC 文件系統的剩余空間不足。<BR>EIO I/O
存取錯誤。<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(由文件描述詞取得文件狀態) </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,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>定義函數 </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>函數說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>lstat()與stat()作用完全相同,都是取得參數file_name所指的文件狀態,其差別在于,當文件為符號連接時,lstat()會返回該link本身的狀態。詳細內容請參考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>執行成功則返回0,失敗返回-1,錯誤代碼存于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(打開目錄) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -