- . ( ).
Linux :
- scandir () ,
int scandir (const char * dir, struct dirent *** namelist,
int (* select) (const struct dirent *),
int (* compar) (const struct dirent **, const struct dirent **));
alphasort () versionsort (), , , .
- opendir (), readdir (), closedir ().
# Include <sys/types.h>
# include <dirent.h>
DIR * opendir (const char * pathname);
Return: , OK, NULL
struct dirent * readdir (DIR * dp);
Return: , OK, NULL
void rewinddir (DIR * dp);
int closedir (DIR * dp);
Return: 0, OK, -1
dirent <dirent.h> . .
struct dirent
{int_td_ino; / / I-node
char d_name [NAME_MAX +1]; / / '
}
NAME_MAX fpathconf (). BSD- 255.
DIR , , . DIR, opendir (), .
printdir, , .
# Include <stdio.h>
# include <dirent.h>
int sel (struct dirent * d)
{return 1; / / }
int main (int argc, char ** argv)
{inti, n;
struct dirent ** entry;
if (argc! = 2)
{printf (":% s <> \ n", argv [0]);
return 0;}
n = scandir (argv [1], & entry, sel, alphasort);
if (n <0)
{printf (" \ n");
return 1;}
for (i = 0; i <n; i + +)
printf ("% s inode =% i \ n", entry[i]->d_name, entry [i] -> d_ino);
return 0;}
scandir () . -, , , , . sel (). sel () 0, . scandir - . alphasort (), .
|
|
dirent. , dirent , . dirent inode ( inode, , , ). dirent d_type char *, , , null.
scandir () . , , .
:
# Include <stdio.h>
# include <dirent.h>
int main (int argc, char ** argv)
{DIR * d;
struct dirent * entry;
if (argc! = 2)
{printf (":% s <> \ n ", argv [0]);
return 0;}
d = opendir (argv [1]);
if (d == NULL)
{printf (" \ n ");
return 1;}
while (entry = readdir (d))
printf ("% s inode =% i \ n", entry-> d_name, entry-> d_ino);
closedir (d);
return 0;}
opendir (), readdir () closedir (), . readdir () TRUE , .
3.
int chdir (char * pathname);
pathname - '
chdir , pathname; pathname .
chdir 0, . -1 ; errno ENOENT, , path-' . , pathname .
:
1) chdir ("/"); / * : chdir ("\")
chdir ("..") / * * /
2) void lookdir (char * s, int ac, char ** av)
chdir (s)
3)chdir ("c: / temp");
c: \ \ temp , (\ \) oo (\). - e escape-o C-o.
4.
, ' , . ' - , . , , link:
link - # include <unistd.h>
int link (const char * oldpath, const char * newpath)
oldpath, '
newpath '
0 , -1 ( - errno)
(oldpath) ' - . (newpath) ' . , UNIX . , , , . ' , , - link 쳺 .
|
|
, unlink.
.. , - (read, write).
5.
- /
uj , t - , ' . . , open , , ', . , , ( , ). , ' , . , ' .
symlink:
# include <unistd.h>
int symlink (const char * oldpath, const char * newpath)
oldpath, '
newpath '
0 , -1 ( - errno)
unlink.
readlink -
# include <unistd.h>
ssize_t readlink (const char * path, char * buf, size_t bufsize)
path - '
buf
bufsize ;
0 , -1 ( - errno)
readlink ' ' , 0, UNIX . , 1 , \ 0:
6.
. link unlink.
:
- , .
- ' . , , , , link . , , .
- ( - ) , . ;
- - , . , . , , , , . , .
- , , .
..
|
|
, .
?
1. , , , . - .
2. link , . - ³ POSIX rename.
3. , . - .
rename - include <stdio.h>
int rename (const char * oldpath, const char * newpath)
oldpath, '
newpath '
0 , -1 ( - errno)
rename :
1. newpath , unlink rmdir.
2. link (oldpath, newpath), oldpath .
3. unlink rmdir oldpath.
, .
1. 2 , ( newpath).
2. newpath , newpath, oldpath , , .
3. , '
4. newpath , ( rmdir). 3, oldpath - , , , newpath.
5. oldpath , rename , , .
6. rename , .
, 1, 2 3 , , , .
rename mv, .
− .
− .
7.
1. , . , . ' .
2. . , . ' .
3. , ' . , . , .
4. , . . , .
5. , . ' .
6. (' ) , .
|
|
7. ﳿ , .
8. . , . ' .
9. "*. c" "*.cpp".
10. "./Links" ".Link".
11. , ' , , ' "a" "z", .
7. .
: 㳺 . .
:
:
− UNIX;
− ;
− ;
− .
1. UNIX
: , .
1. , , inode.
4- , INODE, - , .
' INODE. INODE ' , INODE ' . , ' INODE.
, , INODE. .
INODE:
di_mode
file mode
di_count
di_uid
di_gid
di_size
di_addr[0].
di_addr[n]
di_atime
di_mtime
di_ctime
INODE "di_". INODE "integer".
file mode - 2- , 9 (read/write) ( exe). 3- , , , . 4 , (exe) ( 4 ).
link count - , . 0, INODE , . => 2 ( ). , INODE '- , .
group id - , ' .
file size - , 0 .
.
UNIX i_list INODE's. i_list '.
2. UNIX : () ( ).