Unix 环境高级编程

1. 一切皆文件;
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




猜你喜欢

转载自blog.csdn.net/zhshuai1/article/details/52076037