2.对于每种资源都有open/read/write/close操作,因为一切皆文件;
3.对于不清楚的参数,可以使用man: man open; man 2 open; man -s2 open;
4. 函数: strerror ferror sysconf
-----------------------------------------------------
include 文件路径可以使用gcc -v 获取./configure 的prefix
Mac: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/
Linux: /usr/include:
-----------------------------------------------------
// unistd.h
STDIN_FILENO 0
STDOUT_FINLENO 1
STDERR_FILENO 2
//fcntl.h->bits/fcntl.h
O_WRONLY 01
------------------------------------------------------ 无缓冲文件操作函数:
open creat lseek read write pread pwrite close
dup dup2 fcntl
------------------------------------------------------
1.1 重定向符号
> 输出重定向到一个文件或设备 覆盖原来的文件
>! 输出重定向到一个文件或设备 强制覆盖原来的文件
>> 输出重定向到一个文件或设备 追加原来的文件
< 输入重定向到一个程序 1.2标准错误重定向符号
2> 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 b-shell
2>> 将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
2>&1 将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出
>& 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 c-shell
|& 将一个标准错误 管道 输送 到另一个命令作为输入
./a.out 5<>temp 1> test 2>&1 | grep hello # 使用5作为文件描述符对temp进行读写,将标准错误重定向到标准输出,标准输出重定向的文件test,查找标准输出中包含hello的行显示在标准输出;
----------------------------------------------------------
将errno转化为string: strerror/ perror
----------------------------------------------------------
Linux限制:/usr/include/sys/limits.h
sysconf pathconf fpathconf
----------------------------------------------------------
标准IO重置流的定向: fwide freopen
为文件制定缓冲类型 setbuf setvbuf
带缓冲的IO:
单个字符: getc getchar fgetc ungetc putc fputc putchar ferror feof
单行: gets fgets puts fputs
二进制IO:fread fwrite
定位流:fseek ftell/ fsetpos fgetpos/fseeko ftello /frewind=fseek(0)
格式化IO:printf scanf/fprintf fscanf/sprintf sscanf/snprintf snscanf
fileno: File* -> fd
临时文件:tmpnam tmpfile
--------------------------------------------------------
getpwuid getpwnam
--------------------------------------------------------
进程终止:
return
exit:关闭IO流,执行"终止处理程序",调用_exit/_Exit
_exit/_Exit:立即进入内核
终止处理程序:atexit
size 查看可执行程序各个存储的大小
存储器内存分配: malloc(不进行初始化) calloc(初始化为0) realloc(更改已分配内存的大小) free
环境表environ 环境变量:getenv/ setenv/ putenv(name=value)
进程限制:getrlimit/ setrlimit
------------------------------------------------------
进程id getpid/getppid/getuid/geteuid/getgid/getegid
fork/vfork fork会使子进程获得父进程的数据空间,堆和栈的副本,但是很多实现并不立即复制,而是使用写时复制。vfork 子进程在调用exec之前会在父进程的空间中运行。vfork保证子进程先运行。
如果父进程先终止,则子进程变成init进程的子进程。
父子进程通信:wait waitpid waitid wait3 wait4
------------------------------------------------------
注册信号处理函数:signal
发送信号:kill/raise/alarm
------------------------------------------------------
线程:pthread_equal
pthread_self----getpid
pthread_create----fork/vfork
pthread_exit----exit
pthread_join----waitpid
pthread_cancel_push----atexit
pthread_cancel----abort
pthread_detach
pthread_mutex_init/pthread_mutex_destroy/pthread_mutex_lock/pthread_mutex_unlock/pthread_mutex_trylock
pthread_rwlock_init/pthread_rwlock_destroy/pthread_rwlock_rdlock/pthread_rwlock_wrlock/pthread_rwlock_unlock
pthread_cond_init/pthread_cond_destroy/pthread_cond_wait/pthread_cond_timedwait
------------------------------------------------------
进程通信:signal/pipe(int fd[2])/getmsg/getsem/mkfifo