栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux之常见的系统函数

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux之常见的系统函数

1. 文件管理 1.1 open函数:打开文件
int open(const char *pathname,int flags,mode_t mode);
  • 返回值:open成功返回文件描述符,失败返回-1
  • filename:要打开的文件名
  • flags:打开的方式
  • mode:若以创建的方式打开,用mode设置文件的权限
1.2 close函数:关闭文件
int close(int fd);
  • 返回值:0代表关闭成功,-1产生错误
  • fd:文件描述符
1.3 read函数:从文件中读取
ssize_t read(int fd, void *buf, size_t count);
  • 返回值:
    • -1:读文件失败
    • 0:文件已被读完
    • 正数:读取的字节数
  • fd:文件描述符
  • buf:缓冲区,传出参数,用于存放读取的数据
  • count:读取时指定要读取的字节数
1.4 write函数:向文件中写入
ssize_t write(int fd, const void *buf, size_t count);
  • 返回值:写失败的时候返回-1。 写成功返回写入的字节数
  • fd:文件描述符
  • buf:缓存区,传入参数,提供要写入的数据
  • count:指定要写入的字节数。
1.5 lseek函数:移动文件指针
off_t lseek(int fd, off_t offset, int whence);
  • 返回值
    • 返回-1表示出错
    • 成功则返回相对文件开始的偏移量
  • fd:文件描述符
  • offset:偏移量
  • whence:偏移量相对于什么开始的
1.6 stat函数:查看文件状态
int stat(const char *pathname, struct stat *statbuf);
  • 返回值:操作是否成功
  • pathname:查看哪个文件的状态
  • statbuf:传出参数,封装状态结果
2. 进程管理 2.1 fork函数:创建子进程
pid_t fork(void);
  • 返回值
    • 子进程中,返回值值为0
    • 父进程中,创建子进程成功则返回子进程pid;创建线程失败则返回-1
2.2 waitpid函数:等待子进程终止
// 回收任意子进程
pid_t wait(int *wstatus);

pid_t waitpid(pid_t pid, int *wstatus, int options);
  • 返回值:-1表示出错,其他情况表示返回的子进程pid
  • wstatus:传出参数,接收子进程退出的状态信息。
  • pid:
    • <-1 回收指定进程组内的任意子进程
    • -1  回收任意子进程(相当于wait)
    • 0 回收和当前调用waitpid进程一个组的所有子进程
    • >0 回收指定id的子进程
  • options:可以用来指定以非阻塞方式运行
    • 非阻塞方式执行,直接返回系统调用结果。
      • 如果没有子进程结束,返回值为0
      • 如果有子进程结束,返回值为子进程的id
2.3 exec函数族:替换一个进程的核心映像
  • l(list): 命令行参数列表
  • p(path): 搜索文件时使用PATH环境变量
  • v(vector):使用命名行参数数组
  • e(environment):使用环境变量数组,不适用进程原有的环境变量。设置新加载程序运行的环境变量
// l代表list,p代表path
int execlp(const char *file, const char *arg, ... );
// 示例
execlp("ls","ls","-l","-F",NULL);


// 没有使用path环境变量,所以pathname需要指明绝对路径
int execl(const char *path, const char *arg, ... );
//示例
execl("/bin/ls","ls","-l","-F",NULL);

// p代表使用系统的PATH环境变量
int execvp(const char *file, char *const argv[]);

// e代表使用自己定义的环境变量数组
int execve(const char *file, char *const argv[], char *const envp[]);
  •  变参需要以NULL结尾。
  • 返回值:只有在失败会返回-1,成功的话啥都不返回。因为整个代码都被替换了。
  • argv:参数数组
  • envp:环境变量数组
int main(){
    if fd;
    // 打开已经存在的文件
    fd=open("hello.txt",O_RDWR);
    // 如果打开失败
    if(fd==-1){
        // 输出失败原因
        perror("open file");
        exit(1);
    }

    // 将标准输出替换为指定文件
    dup2(fd,STDOUT_FILENO);
    
    // 如果这个成功,后面的代码就不走了,因为代码被替换了。
    execlp("ps","ps","ax",NULL);
    // 只有上一步执行发生错误,才会执行下面的逻辑
    perror("exec error");
    exit(1);
    return 0;
}
2.4 exit函数:终止进程被返回状态
void _exit(int status);
2.5 kill函数:发信号给进程
int kill(pid_t pid, int sig);
 2.6 getpid函数:获取当前进程的id
pid_t getpid(void);
2.7 getppid函数:获取当前进程的父进程id
pid_t getppid(void);
 2.8 getuid函数:获取当前进程的实际用户
uid_t getuid(void);
2.9 getgid函数:获取当前进程的用户组id
gid_t getgid(void);
3. 文件和目录管理 3.1 mkdir函数:创建目录
int mkdir(const char *pathname, mode_t mode);
  • 返回值:是否成功
  • pathname:目录名
  • mode:目录的权限
3.2 rmdir函数:删除空目录
int rmdir(const char *pathname);
3.3 chdir函数:改变工作目录
int chdir(const char *path);
3.4 chmod函数:修改文件保护位
int chmod(const char *pathname, mode_t mode);
3.5 link函数:创建一个硬链接
int unlink(const char *oldpath,const char *newpath)
 3.6 unlink函数:删除一个链接
int unlink(const char *pathname);
  • 如果是符号连接,删除符号连接
  • 如果是硬链接,硬链接数减一。减到0时,释放数据块和inode
  • 注意:如果文件硬链接数为0,但有进程已打开该文件,并持有文件描述符,则等待进程关闭文件时,kernel才真正去删除该文件。 

补充:目录(文件)项的组成

  • denty:目录项
    • ​​​​​​​文件名
    • inode编号(对应一个inode结构体)
      • ​​​​​​​存储指针地址(从而找到文件的磁盘位置)
      • 大小
      • 权限
      • 类型
      • 所有者
3.7 truncate函数:修改文件为指定大小
  • 将参数path指定的文件大小改为参数length指定的大小。如果原来的文件比参数length大,则截断。如果原来的文件比参数length小,则增加。
int truncate(const char *path, off_t length);
  • 返回值:是否成功
  • path:文件路径
  • length:指定的文件大小
4. 环境变量 4.1 getenv函数:获取环境变量的值
char *getenv(const char *name);
  • 返回值
    • 成功时返回环境变量的值
    • 失败时返回NULL
4.2 setenv函数:设置环境变量的值
int setenv(const char *name, const char *value, int overwrite);
  • 返回值:值为0表示成功,值为-1表示失败
  • overwrite:
    • 1:覆盖原来环境变量
    • 0:不覆盖
4.3 unsetenv函数:删除环境变量
int unsetenv(const char *name);
  • 返回值:
    • 0:删除成功
    • -1:删除失败
5. 文件描述符的复制 5.1 dup2函数
// 用文件描述符oldfd的值去覆盖文件描述符newfd的值。最后返回文件描述符newfd
int dup2(int oldfd, int newfd);
  • 返回值:
    • 返回值被覆盖的文件描述符
  • 用文件描述符oldfd的值去覆盖文件描述符newfd的值。最后返回文件描述符newfd
  • 可以实现原本输出到终端变成输出到指定文件中。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/277050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号