一、路径的更改
#include <unistd.h>
int chdir(const char *path);
int fchdir(int fd);

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

演示案例

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>

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

APUE编程:47---文件目录(路径的查看、更改:chdir、fchdir、getcwd)_#include

二、路径的获取

APUE编程:47---文件目录(路径的查看、更改:chdir、fchdir、getcwd)_路径的查看、更改_02

#include <unistd.h>
char *getcwd(char *buf, size_t size);

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

演示案例

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>

#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);
}

APUE编程:47---文件目录(路径的查看、更改:chdir、fchdir、getcwd)_路径的查看、更改_03

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

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