《UNIX环境高级编程》(第三版第一章)

来源:互联网 发布:mac redis可视化工具 编辑:程序博客网 时间:2024/05/18 00:30
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.cextern void exitnow();int foo(int n){if(n>0){exitnow();/* control never reaches this point */}        elsereturn 0;}$gcc -c -Wall test1.ctest1.c: In function `foo':test1.c:8: warning: this function may return with or without a value$cat test2.cextern void exitnow() __attribute__((noreturn));int foo(int n){if(n>0)exitnow();elsereturn 0;}$gcc -c -Wall test2.cno 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。



1 0