1、列出一个目录所有文件
#include "apue.h"
#include<dirent.h>
.....
DIR *dp;
struct dirent *dirp;
...
if( dp = opendir(argv[1]) == NULL )
...
while( (dirp = readdir(dp) ) != NULL )
printf( "%s\n", dirp->d_name );
closedir( dp );
//apue.h包含了某些系统头文件
2、标准IO
getc(stdin); putc(c, stdout); ferror(stdin); err_sys(); err_quit()
不用缓冲IO
open, read, write, lseek, close
n = read( STDIN_FILENO, buf, BUFFERSIZE );
3、进程
使用6个exec函数中的一个由内核将程序读入存储器,并使其执行
getpid() 获取进程ID
进程控制:
fork, exec, waitpid
调用fork创建一个新进程,新进程是调用进程的复制品,调用进程为父进程,新创建的为子进程。
execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了.
waitpid,其参数指定要等待的进程
4、出错处理
char *strerror( int errnum )
void perror( const char *msg )
5、用户标识
getuid(); getgid()
6、信号
进程对信号的处理:
(1)忽略该信号
(2)按系统默认方式处理
(3)提供一个函数,信号发生时则调用该函数,这被称为信号该信号
if( signal( SIGINT, sig_int ) == SIG_ERR )
.....
//sig_int为捕捉信号后的处理函数
7、时间值
1)日历时间: time_t
2)进程时间: clock_t