• 1:输入输出
通过>符号将输出重定向到文件中
1 #include<unistd.h>
2 #include<stdlib.h>
3 #include<signal.h>
4 #include<stdio.h>
5
6 int main()
7 {
8 for(int i = 0;i < 10;++i)
9 printf("i = %d\n",i);
10 return 0;
11 }
执行
./output > outfile
2:程序与进程
通过getpid获得当前进程
1 #include<string.h>
2 #include<errno.h>
3 #include<stdio.h>
4 #include<unistd.h>
5 int main()
6 {
7 printf("hello world from process ID %ld\n",(long)getpid());
8 exit(0);
9 }
• 3:出错处理
(1)当unix 系统函数出错时,通常会返回一个负值,而且整型常量error通常被设置为具有特定信息的值。unix系统函数执行成功一般返回0
(2)文件<errno.h>中定义了errno以及可以赋予它的各种常量,这些常量都以字符E开头。在支持线程的环境中,多个线程共享地址空间,每个线程都有属于自己的局部errno以避免一个线程干扰另一个线程。
(3)对于 errno 的使用要注意两条规则:
• 如果没有出错,则errno的值不会被清除.因此只有在函数的返回值指明出错了时,检查errno才有意义
• 任何函数都不会将errno的值清零,且在<errno.h>中定义的所有常量都不为
(4)出错恢复
可以将<errno.h>中定义的错误分成两类:
致命性错误:此类错误无法恢复。最多只能在屏幕上打印一条出错消息或者将出错消息写入日志,然后退出。
非致命性错误:此类错误可以妥善处理。大多数非致命性错误时暂时的(比如资源短缺)
1#include "apue.h"
2 #include<errno.h>
3
4 int main(int argc,char* argv[])
5 {
6 fprintf(stderr,"EACCES: %s\n",strerror(EACCES));
7 errno = ENOENT;
8 perror(argv[0]);
9 return 0;
10 }
• 4:用户标识
Linux操作系统中,用户ID指向系统标识各个不同的用户,系统管理员在确定一个用户的登录名的同时也确定了其用户的ID,组ID也由系统管理员确定,组ID确定了用户的所在组。
1 #include"apue.h"
2 int main()
3 {
4 printf("uid = %d,gid = %d\n",getuid(),getgid());
5 exit(0);
6 }
• 5:信号
信号用于通知进程发生了某种情况,例如执行除法操作,除数为0,则会将SIGFPE(浮点异常发送给进程)
进程处理信号的方式有三种:
(1)忽略信号
(2)按系统默认方式处理
(3)按提供的函数处理
信号是蛮重要的概念,第八章有比较详细的介绍,还有这个大神的博客讲的也很好https://www.cnblogs.com/0xcafebabe/p/4441592.html。