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

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。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值