//####################################################################### FILE *fopen(const char *path, const char *mode); //打开文件,失败返回NULL //参数说明: //参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。 //mode有下列几种形态字符串: //r 以只读方式打开文件,该文件必须存在。 //r+ 以可读写方式打开文件,该文件必须存在。 //rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。 //rw+ 读写打开一个文本文件,允许读和写。 //w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 //w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 //a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) //a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留) //wb 只写打开或新建一个二进制文件;只允许写数据。 //wb+ 读写打开或建立一个二进制文件,允许读和写。 //ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。 //at+ 打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。 //上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。 //有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。 int fclose(FILE *stream); //关闭一个文件流,成功返回0, 失败返回EOF int feof(FILE *stream); //文件结束返回非0 int fseek(FILE *stream, long offset, int fromwhere); //文件位置指针偏移,成功返回0 //0文件头,1当前,2文件尾 long ftell(FILE *stream); //返回文件位置指针当前位置 int fgetc(FILE *stream); //结尾或出错返回EOF int fputc(int n, FILE *fp); //失败返回EOF char *fgets(char *buf, int bufsize, FILE *stream); //出错返回NULL int fputs(const char *str, FILE *fp); //向文件写入字符串,失败返回EOF size_t fread(void *buffer, size_t size, size_t count, FILE *stream); //读取文件中count*size个字节,成功返回读取到的元素个数(count),否则返回0 size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream); //返回实际写入的数据块数目 int fscanf(FILE *stream, const char *format, [argument...]); int fprintf(FILE *stream, const char *format, [argument...]); //####################################################################### #define STDIN_FILENO 0 //标准输入 #define STDOUT_FILENO 1 //标准输出 #define STDERR_FILENO 2 //标准错误 #include #include #include //open、close头文件 int open(const char *pathname,int flags); //文件存在 int open(const char *pathname,int flags,mode_t mode); //文件不存在 //成功返回fd,失败返回-1 int close (int fd); //关闭文件,成功返回0,失败返回-1 #include //write,read,remove头文件 ssize_t write(int fd,const void *addr,size_t count); //写文件,成功返回写入字节个数,失败返回-1 ssize_t read(int fd,void *addr,size_t count); //读文件,成功返回读出字节个数,失败返回-1 int remove(const char *pathname); //删除文件,成功返回0,失败返回-1 #include #include //进程函数头文件 pid_t getpid(); //获取本进程号 pid_t getppid(); //获取父进程号 pid_t getpgid(); //获取进程组号 pid_t fork(); //在已有进程中创建子进程 //成功,子进程返回0,父进程返回子进程ID;失败,返回-1 unsigned int sleep(unsigned int sec); //进程挂起指定秒数 //成功返回0,中断返回剩余秒数 #include //wait、waitpid头文件 pid_t wait(int *status); //等待子进程结束回收其资源 //成功返回子进程号,失败返回-1 WIFEXITED(status); //子进程正常终止取出字段值非零 WEXITSTATUS(status) //返回保存在status变量8~16位的子进程退出状态(正常退出才可使用) pid_t waitpid(pid_t pid,int *status,int options); //等待子进程结束回收其资源 //成功返回子进程号,失败返回-1 #include //exit头文件 void exit(int value); //结束进程执行 #include //_exit头文件,value低八位有效 void _exit(int value); //结束进程执行,value低八位有效 #include //atexit头文件 int atexit(void (*function)(void)); //注册进程结束前调用的函数 pid_t vfork(); //创建子进程,出错返回-1 #include //exec函数组头文件 int execl(const char *pathname,const char *arg0,...,NULL); int execlp(const char *filename,const char *arg0,...,NULL); int execle(const char *pathname,const char *arg0,...,NULL,char *const envp[]); int execv(const char *pathname,char *const argv[]); int execvp(const char *filename,char *const argv[]); int execve(const char *pathname,char *const argv[],char *const envp[]); //exec函数组成功无返回,失败返回-1 #include //system头文件 int system(const char *command); //调用系统命令,command空时返回非0,失败返回127或-1 //Ctrl+c产生中断信号:SIGINT //Ctrl+\产生中断信号:SIGQUIT //Ctrl+z产生中断信号:SIGSTOP //SIGKILL和SIGSTOP的处理方式不可更改 #include #include //kill头文件 int kill(pid_t pid,int signum); //给进程发送信号,成功返回0,失败返回-1 #include //alarm头文件 unsigned int alarm(unsigned int seconds); //seconds秒后发出SIGALRM信号,默认终止 #include //raise头文件 int raise(int signum); //给进程发送信号,成功返回0,失败返回-1 #include //abort头文件 void abort(); //默认向进程发送SIGABRT信号,默认退出 //终止前刷新缓冲区,关闭文件描述符 #include //pause头文件 int pause(); //挂起进程直至捕捉到信号,成功返回-1 #include //signal头文件 typedef void (*sighandler_t)(int); sighandler_t signal(int signum,sighandler_t handler); //注册信号处理函数 SIG_IGN //忽略信号 SIG_DFL //执行默认动作 自定义 #include //信号集头文件 int sigemptyset(sigset_t *set); //初始化一个空信号集,成功返回0,失败返回-1 int sigfillset(sigset_t *set); //初始化为所有信号的集合,成功返回0,失败返回-1 int sigismember(const sigset_t *set,int signum); //查询signum是否在set中,在返回1,不在返回0,错误返回-1 int sigaddset(sigset_t *set,int signum); //加signum到set中,成功返回0,失败返回-1 int sigdelset(sigset_t *set,int signum); //从set中删除signum,成功返回0,失败返回-1 int sigprocmask(int how,const sigset_t *set,sigset_t *oldset); //编辑阻塞集,成功返回0,失败返回-1 SIG_BLOCK //添加set集合 SIG_UNBLOCK //删除set集合 SIG_SETMASK //设置为set集合 #include //管道头文件 int pipe(int fd[2]); //创建pipe,成功返回0,失败返回-1 void fcntl(fd,F_SETFL,0); //设置文件阻塞 O_NONBLOCK //设置文件非阻塞 int dup(int oldfd); //成功返回新文件描述符,失败返回-1 int dup2(int oldfd,int newfd); //强制分配并返回newfd,失败返回-1 //close_on_exec 标志决定文件描述符在执行exec之后是否可用 int flags; flags=fcntl(fd,F_GETFD); //获得标志 flags|=FD_CLOEXEC; //打开标志位 flags&=~FD_CLOEXEC; //关闭标志位 fcntl(fd,F_SETFD,flags); //设置标志 #include #include //mkfifo头文件 int mkfifo(const char *pathname,mode_t mode); //创建fifo,成功返回0,文件已存在返回-1 //不指定NONBLOCK //open只读打开FIFO,阻塞至某进程为写打开FIFO //open只写打开FIFO,阻塞至某进程为读打开FIFO //open以只读只写打开FIFO,调用read阻塞 //通信中写退出,read不阻塞,写恢复,read阻塞 //通信中读退出,写进程也退出 //缓冲区满时write阻塞 //open以可读可写打开FIFO,open不阻塞,read阻塞,缓冲区满时write阻塞 #include #include //ftok头文件 key_t ftok(const char *pathname, int proj_id); //获取IPC键值,成功返回key,失败返回-1 #include //msgget头文件 int msgget(key_t,int msgflg); //创建消息队列,成功返回消息队列标识符,失败返回-1 typedef struct { long mtype; char mtext[100]; }MSG; //消息格式 int msgsnd(int msgid,const void *msgp,size_t msgsz,int msgflg); //添加消息到队列,成功返回0,失败返回-1 ssize_t msgrcv(int msgid,void *msgp,size_t msgsz,long msgtyp,int msgflg); //接收消息,成功返回读取消息的长度,失败返回-1 int msgctl(int msgid,int cmd,struct msgid_ds *buf); //控制消息队列属性,成功返回0,失败返回-1 IPC_RMID #include #include #include //共享内存头文件 int shmget(key_t key,size_t size,int shmflg); //创建或打开共享内存,成功返回共享内存标识符,失败返回-1 void *shmat(int shmid,const void *shmaddr,int shmflg); //映射,成功返回映射地址,失败返回-1 NULL 0 int shmdt(const void *shmaddr); //分离共享内存,成功返回0,失败返回-1 int shmctl(int shmid,int cmd,struct shmid_ds *buf); //共享内存控制,成功返回0,失败返回-1 IPC_RMID //删除 void *shmat(int shmid,const void *shmaddr,int shmflg); //映射,成功返回映射地址,失败返回-1 #include //线程头文件,编译加参数 -lpthread int pthread_create(pthread_t *thread,const thread_attr_t *attr,void *(*start_routine)(void *),void *arg); //创建线程 NULL int pthread_join(pthread_t thread,void **retval); //等子进程结束回收资源,成功返回0,失败返回非0,有阻塞 int pthread_detach(pthread_t thread); //独立线程,终止时系统回收资源,成功返回0,失败返回非0 //不终止进程的前提下终止线程 //1 线程从执行函数中返回 //2 线程调用pthread_exit //3 被其他线程取消 void pthread_exit(void *retval); //退出线程 int pthread_cancel(pthread_t thread); //发送取消线程信号,成功返回0,失败返回出错编号,无阻塞 pthread_setcancelstate(int state,int *old_state); //设置线程是否可被取消,默认是 PTHREAD_CANCEL_DISABLE //不可取消 PTHREAD_CANCEL_ENABEL //可以取消 //出现取消点的函数见posix*.bmp void pthread_setcanceltype(int type,int *oldtype); //立即终止线程 PTHREAD_CANCEL_ASYNCHRONOUS //立即取消 PTHREAD_CANCEL_DEFERRED //不立即取消 void pthread_cleanup_push(void (*routine)(void *),void *arg); //注册线程清理函数 void pthread_cleanup_pop(int execute); //删除清理函数,0==execute?不清理:清理 //调用清理函数 //1 调用pthread_exit退出线程 //2 相应其他线程取消要求 //3 非零execute调用pthread_cleanup_pop int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *arrt); //初始化互斥锁,成功返回0,失败返回非0 NULL //默认属性 int pthread_mutex_lock(pthread_mutex_t *mutex); //上锁,阻塞至解锁,成功返回0,失败返回非0 int pthread_mutex_trylock(pthread_mutex_t *mutex); //上锁,否则立即返回,成功返回0,失败返回非0,非阻塞 int pthread_mutex_unlock(pthread_mutex_t *mutex); //解锁,成功返回0,失败非0 int pthread_mutex_destroy(pthread_mutex_t *mutex); //销毁锁,成功返回0,失败返回非0 #include //信号量头文件 int sem_init(sem_t *sem,int pshared,unsigned int value); //创建初始化信号量,成功返回0,失败返回-1 //pshared==0?线程:进程 //信号初始值 int sem_wait(sem_t *sem); //信号量值减1,小于0阻塞,成功返回0,失败返回-1 int sem_trywait(sem_t *sem); //同上,不阻塞 int sem_post(sem_t *sem); //信号值加1等待唤醒,阻塞,成功返回0,失败返回-1 int sem_getvalue(sem_t *sem,int *sval); //sval保存sem标识,成功返回0,失败返回-1 int sem_destroy(sem_t *sem); //删除信号量,成功返回0,失败返回-1 //进程间通信一般用有名信号量 #include #include #include //有名信号量头文件 sem_t *sem_open(const char *name,int oflag,mode_t mode,unsigned int value); //创建信号量,成功返回信号量地址,失败返回SEM_FAILED int sem_close(sem_t *sem); //关闭有名信号量,成功返回0,失败返回-1 int sem_unlink(const char *name); //删除有名信号量文件,成功返回0,失败返回-1