104 lines
3.3 KiB
Markdown
104 lines
3.3 KiB
Markdown
#### 概述
|
||
|
||
unistd是unix std的意思,由POSIX标准定义。包含了大量的对系统调用的封装。
|
||
|
||
#### 相关函数
|
||
|
||
##### 创建管道
|
||
|
||
```c
|
||
/*
|
||
* 创建单向的管道。
|
||
* 参数:向pipefd[1]的写入,在pipefd[0]能读出来。
|
||
* 返回值:成功返回0,失败返回-1。
|
||
*/
|
||
int pipe(int pipefd[2]);
|
||
|
||
int pipe2(int pipefd[2], int flags);
|
||
```
|
||
|
||
##### 截断文件
|
||
|
||
```c
|
||
/* 将文件名为path的文件截断到长度为length字节,截断的原则是多退少补
|
||
* 返回值:0成功,-1失败。
|
||
*/
|
||
int truncate(const char *path, off_t length);
|
||
|
||
/* 将文件描述符为fd的文件截断到长度为length字节,截断的原则是多退少补
|
||
* 返回值:0成功,-1失败。
|
||
*/
|
||
int ftruncate(int fd, off_t length);
|
||
```
|
||
|
||
##### 运行文件
|
||
|
||
`exec()`家族的后端是`execve()`系统调用,它们都是用新进程来替代当前进程。它们只有在发生错误才返回,返回值是-1。
|
||
|
||
- p - 表示可以在环境变量PATH里找可执行文件
|
||
- e - 表示可以通过参数指定环境,即`envp[]`
|
||
- v - 表示在参数里提供了指针数组,即`argv[]`。v和l是互斥的。
|
||
- l - 表示是以`const char *`的形式给出的参数。l和v互斥的。
|
||
|
||
```c
|
||
extern char **environ;
|
||
|
||
/* 要执行的文件必须以路径的形式给出,即path */
|
||
int execl(const char *path, const char *arg, ...
|
||
/* (char *) NULL */);
|
||
|
||
/* 如不包含斜杠,则在环境变量PATH里找可执行文件;否则执行指定路径上的文件 */
|
||
int execlp(const char *file, const char *arg, ...
|
||
/* (char *) NULL */);
|
||
|
||
/* 要执行的文件必须以路径的形式给出,即path
|
||
* 可以通过envp指定环境
|
||
*/
|
||
int execle(const char *path, const char *arg, ...
|
||
/*, (char *) NULL, char * const envp[] */);
|
||
|
||
/* 要执行的文件必须以路径的形式给出,即path */
|
||
int execv(const char *path, char *const argv[]);
|
||
|
||
/* 如不包含斜杠,则在环境变量PATH里找可执行文件;否则执行指定路径上的文件 */
|
||
int execvp(const char *file, char *const argv[]);
|
||
|
||
/* 如不包含斜杠,则在环境变量PATH里找可执行文件;否则执行指定路径上的文件
|
||
* 可以通过envp指定环境
|
||
*/
|
||
int execvpe(const char *file, char *const argv[],
|
||
char *const envp[]);
|
||
```
|
||
|
||
##### 其它
|
||
|
||
```c
|
||
/* 关闭文件描述符 */
|
||
int close(int fd);
|
||
|
||
/* 从文件描述符fd里读取count个字节到到缓冲区buf里。注意:read会使文件位置增长。
|
||
* 返回值:成功则返回读取的字节数,返回0代表已到了文件的末尾。错误则返回-1。
|
||
*/
|
||
ssize_t read(int fd, void *buf, size_t count);
|
||
/*
|
||
* 从缓冲区buf写入count个字符到文件描述符fd。
|
||
* 返回值:成功则返回写入的字节数。错误则返回-1。
|
||
*/
|
||
ssize_t write(int fd, const void *buf, size_t count);
|
||
/*
|
||
* 在运行的时候获取配置信息
|
||
* name: _SC_NPROCESSORS_ONLN当前在线的处理器数量
|
||
* _SC_NPROCESSORS_CONF已配置的处理器数量
|
||
*/
|
||
long sysconf(int name);
|
||
|
||
/* 创建子进程
|
||
* 返回值:成功,如是父进程则返回子进程的pid,如是子进程则返回0。失败,父进程返回-1,子进程不会创建。
|
||
*/
|
||
pid_t fork(void);
|
||
|
||
/* 返回当前线程在内核里的线程id */
|
||
pid_t gettid(void);
|
||
```
|
||
|