UNIX(编程-文件目录):15---路径的查看、更改(chdir、fchdir、getcwd)

一、路径的更改

#include 
int chdir(const char *path);
int fchdir(int fd);

//返回值:成功返回0;出错返回-1
  • 两个函数分别用path或打开文件描述符来指定当前的工作目录
  • 此函数只改变程序运行时执行的路径,并不改变其他进程
  • chdir会跟随符号链接

演示案例

#include
#include
#include

int main()
{
    if(chdir("/tmp")==-1){
        perror("chdir");
        exit(1);
    }
    printf("chdir to /tmp success\n");
    exit(0);
}

UNIX(编程-文件目录):15---路径的查看、更改(chdir、fchdir、getcwd)_第1张图片

二、路径的获取

UNIX(编程-文件目录):15---路径的查看、更改(chdir、fchdir、getcwd)_第2张图片

#include 
char *getcwd(char *buf, size_t size);

//返回值:成功返回buf;失败返回NULL
  • buf必须有足够的空间容纳绝对路径名再加上一个终止NULL字符,否则返回错误
  • getcwd不会跟随符号链接

演示案例

#include
#include
#include

#define MAXSIZE 100
int main()
{
    char buff[MAXSIZE];
    ssize_t len;
    if(getcwd(buff,sizeof(buff))==NULL){
        perror("getcwd");
        exit(1);
    }
    printf("current pathname:%s\n",buff);
    if(chdir("/tmp")==-1){
        perror("chdir");
        exit(1);
    }
    printf("chdir /tmp success\n");
    
    if(getcwd(buff,sizeof(buff))==NULL){
        perror("getcwd");
        exit(1);
    }
    printf("current pathname:%s\n",buff);
    exit(0);
}

三、符号链接的问题

  • 我们书写下面的程序,验证chdir会跟随符号链接,而gecwd不会

UNIX(编程-文件目录):15---路径的查看、更改(chdir、fchdir、getcwd)_第3张图片

你可能感兴趣的:(UNIX(编程-文件目录))