📄 12.htm
字号:
<TD><FONT face=宋体 size=2><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 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>执行 </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(设置下回读取目录的位置) </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,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>定义函数 </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>函数说明 </FONT></DIV></TD>
<TD><FONT face=宋体
size=2>seekdir()用来设置参数dir目录流目前的读取位置,在调用readdir()时便从此新位置开始读取。参数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>错误代码 </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>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>执行 </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(取得文件状态) </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,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 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>函数说明 </FONT></DIV></TD>
<TD><FONT face=宋体
size=2>stat()用来将参数file_name所指的文件状态,复制到参数buf所指的结构中。<BR>下面是struct
stat内各参数的说明<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 文件的设备编号<BR>st_ino 文件的i-node<BR>st_mode
文件的类型和存取的权限<BR>st_nlink 连到该文件的硬连接数目,刚建立的文件值为1。<BR>st_uid
文件所有者的用户识别码<BR>st_gid 文件所有者的组识别码<BR>st_rdev 若此文件为装置设备文件,则为其设备编号<BR>st_size
文件大小,以字节计算<BR>st_blksize 文件系统的I/O 缓冲区大小。<BR>st_blcoks 占用文件区块的个数,每一区块大小为512
个字节。<BR>st_atime
文件最近一次被存取或被执行的时间,一般只有在用mknod、utime、read、write与tructate时改变。<BR>st_mtime
文件最后一次被修改的时间,一般只有在用mknod、utime和write时才会改变<BR>st_ctime
i-node最近一次被更改的时间,此参数会在文件所有者、组、权限被更改时更新先前所描述的st_mode 则定义了下列数种情况<BR>S_IFMT
0170000 文件类型的位遮罩<BR>S_IFSOCK 0140000 scoket<BR>S_IFLNK 0120000
符号连接<BR>S_IFREG 0100000 一般文件<BR>S_IFBLK 0060000 区块装置<BR>S_IFDIR 0040000
目录<BR>S_IFCHR 0020000 字符装置<BR>S_IFIFO 0010000 先进先出<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
文件所有者具可读取权限<BR>S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限<BR>S_IXUSR(S_IEXEC)
00100 文件所有者具可执行权限<BR>S_IRGRP 00040 用户组具可读取权限<BR>S_IWGRP 00020
用户组具可写入权限<BR>S_IXGRP 00010 用户组具可执行权限<BR>S_IROTH 00004
其他用户具可读取权限<BR>S_IWOTH 00002 其他用户具可写入权限<BR>S_IXOTH 00001
其他用户具可执行权限<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)
是否为先进先出<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>执行成功则返回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>ENOENT 参数file_name指定的文件不存在<BR>ENOTDIR
路径中的目录存在但却非真正的目录<BR>ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接<BR>EFAULT
参数buf为无效指针,指向无法存在的内存空间<BR>EACCESS 存取文件时被拒绝<BR>ENOMEM
核心内存不足<BR>ENAMETOOLONG 参数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>执行 </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>相关函数 </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>定义函数 </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>函数说明 </FONT></DIV></TD>
<TD><FONT face=宋体
size=2>symlink()以参数newpath指定的名称来建立一个新的连接(符号连接)到参数oldpath所指定的已存在文件。参数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>EPERM 参数oldpath与newpath所指的文件系统不支持符号连接<BR>EROFS
欲测试写入权限的文件存在于只读文件系统内<BR>EFAULT
参数oldpath或newpath指针超出可存取内存空间。<BR>ENAMETOOLONG
参数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>#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>相关函数 </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>表头文
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -