link("abc", "xyz");
#include <dirent.h>
struct dirent {
ino_t d_ino; /* i-node number */
char d_name[NAME_MAX + 1]; /* null-terminated filename */
}
#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);
/* 성공시 0, 실패시 -1이 반환된다. */
$ mkdir dir
$ cat > dir/file.txt
test test test ^D
$ chmod 666 dir //execute 권한 해제
$ ls dir //read 권한 필요
dir/file.txt
$ cat dir/file/txt
cat : dir/file.txt: 허가 거부됨 //execute 권한 없어서
$ chmod 111 dir //execute 권한만 설정
$ ls dir : 허가거부됨 //read 권한 없어서
$ cat dir/file.txt //execute 권한만있으면 file 접근가능
test test test
#include <unistd.h>
int rmdir(const char *pathname);
/* 성공시 0, 실패시 -1이 반환된다. */
#include <dirent.h>
DIR *opendir(const char *dirname);
/* 성공시 pointer, 실패시 NULL이 반환된다. */
int closedir(DIR *dirptr);
/* 성공시 0, 실패시 -1이 반환된다. */
#include <stdlib.h>
#include <dirent.h>
main(){
DIR *dp;
if ((dp = opendir("/tmp/dir1")) == NULL){
fprintf (stderr, "Error on opening directory /tmp/dir1\n");
exit(1);
}
/* 디렉토리에 대한 코드를 처리한다. */
closedir(dp);
}
#include <dirent.h>
struct dirent *readdir(DIR *dp);
/* 성공시 poiter, dirtory의 끝이거나 실패시 NULL 반환 */
#include <dirent.h>
void rewinddir(DIR *dp);
/* 성공시 0, 실패시 -1이 반환된다. */
#include <dirent.h>
int my_double_ls (const char *name){
struct dirent *d;
DIR *dp;
/* 디렉토리를 열어보고, 실패여부를 점검함 */
if ((dp=opendir(name)) == NULL)
return (-1);
/*
readdir(dp) - EOF 만나면 -1 반환
*/
while (d = readdir(dp)){
if (d->d_ino !=0)
printf ("%s\n", d->d_name);
}
rewinddir(dp); /* 디렉토리의 시작으로 되돌아간다. */
/* i-node를 다시 출력한다. */
while (d = readdir(dp)){
if (d->d_ino != 0)
printf ("%s\n", d->d_name);
}
closedir (dp);
}
#include <unistd.h>
int chdir(const char *path);
/* 성공시 0, 실패시 -1이 반환된다. */
fd1 = open(“/usr/ben/abc”, O_RDONLY);
fd2 = open(“/usr/ben/xyz”, O_RDWR);
chdir(“/usr/ben”); //파일 생성시 간편하게 할 수 있다.
fd1 = open(“abc”, O_RDONLY);
fd2 = open(“xyz”, O_RDWR);
#include <unistd.h>
char *getcwd(char *name, size_t size);
/* 성공시 name, 실패시 NULL이 반환된다. */
#include <stdio.h>
#include <unistd.h>
#define VERYBIG 200
void my_pwd (void);
main()
{
my_pwd();
}
void my_pwd (void)
{
char dirname[VERYBIG];
if ( getcwd(dirname, VERYBIG) == NULL)
perror("getcwd error");
else
printf("%s\n", dirname);
}
#include <unistd.h>
int fsync(int filedes);
void sync(void);
/* 성공시 0, 실패시 -1이 반환된다. */
mknod(path, mode, dev);
$ cat fred > /dev/lp
$ cat fred > /dev/rmt0
#include<fcntl.h>
main()
{
int i, fd;
fd = open("/dev/tty00", O_WRONLY);
for(i = 0; i< 100; i++)
write(fd, "x", 1);
close(fd);
}
struct stat {
mode_t st_mode;
dev_t st_rdev; //device number
st_mode
type : 앞의 4bit
macro | file type |
---|---|
S_ISREG() | regular file |
S_ISDIR() | directory file |
S_ISCHR() | character special file |
S_ISBLK() | block special file |
S_ISFIFO() | pipe or fifo |
S_ISLNK() | sysbolic link |
S_ISSOCK() | socket |
if(S_ISCHR(buf.st_mode))
printf(“It’s character device\n”);
else
printf(“It’s not\n”);
switch(stat->st_mode & S_IFMT){
case S_IFBLK:
case S_IFCHR:
case S_IFIFO:
case S_IFREG:
case S_IFDIR:
case S_IFLNK:
case S_IFSOCK:
}
int main(int argc, char *argv[]) {
int i;
struct stat buf;
stat(argv[1], &buf);
printf("dev = %d/%d", major(buf.st_dev), minor(buf.st_dev));
if (S_ISCHR(buf.st_mode) || S_ISBLK(buf.st_mode)) {
printf(" (%s) rdev = %d/%d",(S_ISCHR(buf.st_mode))?"character":"block"
, major(buf.st_rdev)
, minor(buf.st_rdev));
}
printf("\n");
exit(0);
}