1.
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
2.
//当文件是一个符号链接时,stat返回的是该符号链接引用的文件的信息,而lstat返回的是该符号链接的有关信息。
int stat(const char *restrict pathname,struct stat *restrict buf);
int lstat(const char *restrict pathname,struct stat *restrict buf);
int fstat(int fd,struct stat *buf);
3.
$touch f1
$ln f1 f2 硬链接,相同inode。
$ln -s f1 f3 软连接,不同inode。
4.
在最高层次的根目录中,..(父目录)和.(当前目录)相同。
$ls -ldi /. /..
-l 以长格式的形式查看当前目录下所有可见文件的详细信息。
-d 仅打印目录信息,而不是打印目录中所有文件的信息。
-i 打印文件或目录的i节点编号。
5.
#include <dirent.h> //directory entries(entry)目录项。
DIR *opendir(const char *pathname); //一定要是目录。
struct dirent *readdir(DIR *dp);
int closedir(DIR *dp);
6.
$rmdir 目录 目录非空删不了。
$rm -rf 目录
-r 向下递归,不管有多少级目录,一并删除。
-f 直接强行删除,不做任何提示。
7.
int printf(const char *format,...);
int fprintf(FILE *stream,const char *format,...);
int sprintf(char *str,const char *format,...);
int snprintf(char *str,size_t size,const char *format,...);
int vprintf(const char *format,va_list ap);
int vfprintf(FILE *stream,const char *format,va_list ap);
int vsprintf(char *str,const char *format,va_list ap);
int vsnprintf(char *str,size_t size,const char *format,va_list ap); //v可变,n大小。
8.
__attribute__((noreturn)) //若你需要用一个没有返回值的函数A提前终止一个有返回值的函数B。这样可以避免警告:提示B没有返回值。
$cat test1.c
extern void exitnow();
int foo(int n)
{
if(n>0)
{
exitnow();
/* control never reaches this point */
}
else
return 0;
}
$gcc -c -Wall test1.c
test1.c: In function `foo':
test1.c:8: warning: this function may return with or without a value
$cat test2.c
extern void exitnow() __attribute__((noreturn));
int foo(int n)
{
if(n>0)
exitnow();
else
return 0;
}
$gcc -c -Wall test2.c
no warnings!
9.
int chdir(const char *path); //改变工作目录。
10.
重定向 > <
11.
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
12.
pid_t getpid(); //标准保证它能保存在一个长整型中。(long)getpid()
13.
pid_t fork(void); //调用一次,返回两次
pid_t waitpid(pid_t pid,int *statloc,int options);
int execlp(const char *filename,const char *arg0,.../*(char *)0*/); //若出错,返回-1;若成功,不返回。
14.
thread线程:一个进程内的所有进程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为它们能访问同一存储区,所以各线程在访问共享数据时需要采取同步措施以避免不一致性(信号量)。
15.
/*errno可以是一个包含出错编号的整数,也可以是一个返回出错编号指针的函数。在支持多线程的环境中,多个线程共享进程地址空间,每个线程都有属于它自己的局部errno以避免一个线程干扰另一个线程。*/
extern int errno;
extern int *__errno_location(void);
#define errno (*__errno_location())
/*解释:errno实际上并不是我们通常认为的是个整型数值,而是通过整型指针来获取的。这个整型就是线程安全的。另外,宏之所以这样实现,是因为标准库规定了必须能够通过&errno方式取得保存错误代码的变量的地址,因此__errno_location()函数的返回值是指针,并把宏定义为解引用函数返回的地址*__errno_location()。如果__errno_location直接返回int类型,此时就无法取得保存错误代码的变量的地址。*/
//对于errno应当注意两条规则:
//a.如果没有出错,其值不会被例程清除。因此,仅当函数的返回值指明出错时,才检验其值。
//b.任何函数都不会将errno值设置为0,而且在<errno.h>中定义的所有常量都不为0。
16.
char *strerror(int errnum);
void perror(const char *msg);
17.
uid_t getuid(void);
gid_t getgid(void);
18.
中断键:Delete键或Ctrl+C(SIGINT信号)
退出键:Ctrl+\(SIGQUIT信号)
19.
void (*signal(int signo,void (*func)(int)))(int); //r若成功,返回以前的信号处理配置;若出错,返回SIG_ERR。
#define SIG_ERR (void (*)()) -1
#define SIG_DFL (void (*)()) 0 //default
#define SIG_IGN (void (*)()) 1 //忽略信号
20.
日历时间:自1970年1月1日00:00:00以来所经过的秒数累计值(time_t)。
进程时间:以时钟的滴答计算(clock_t)。每秒时钟滴答数:sysconf(_SC_CLK_TCK);
时钟时间
用户CPU时间
系统CPU时间
21.
/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。