第一章 UNIX基础知识
来源:互联网 发布:上市公司网络投票规则 编辑:程序博客网 时间:2024/06/05 11:58
unix体系结构:
#include "apue.h"
#include <dirent.h>
int
main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if (argc != 2)
err_quit("usage: ls directory_name");
if ((dp = opendir(argv[1])) == NULL)
err_sys("can't open %s", argv[1]);
while ((dirp = readdir(dp)) != NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
exit(0);
}
1.输入和输出 文件描述符通常是一个小的非负整数,内核用它标识一个特定进程正在访问的文件。当内核打开一个已有文件和新文件时,它返回一个文件描述符。在读写文件时,就可以使用它。
2.标准输入,输出和出错(略)
3.不用缓冲的IO:函数open,read,write,lseek以及close提供了不用缓冲的IO。这些函数都使用文件描述符
eg:将标准输入复制到标准输出
#include "apue.h"
#define BUFFSIZE 4096
int
main(void)
{
int n;
char buf[BUFFSIZE];
while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
if (write(STDOUT_FILENO, buf, n) != n)
err_sys("write error");
if (n < 0)
err_sys("read error");
exit(0);
}
说明:STDIN_FILENO,STDOUT_FILENO在unistd.h中,
可以复制任意普通的文件。
int main(void)
{
int c;while ((c = getc(stdin)) != EOF)
if (putc(c, stdout) == EOF)
err_sys("output error");if (ferror(stdin))
err_sys("input error");exit(0);
}说明: stdout, stdin ,EOF在头文件 stdio.h中程序和进程:1.程序:程序是存放在磁盘上,处于目录中的一个可执行文件。使用 6个exec函数中的一个由内核将程序读入存储器,并执行。2.进程.(略)3.进程控制:三个进程控制主要函数:fork,exec 和 waitpid。eg:从标准输入读入命令并执行。#include "apue.h"
#include <sys/wait.h>int
main(void)
{
char buf[MAXLINE]; /* from apue.h */
pid_t pid;
int status;printf("%% "); /* print prompt (printf requires %% to print %) */
while (fgets(buf, MAXLINE, stdin) != NULL) {
if (buf[strlen(buf) - 1] == "\n")
buf[strlen(buf) - 1] = 0; /* replace newline with null */if ((pid = fork()) < 0) {
err_sys("fork error");
} else if (pid == 0) { /* child */
execlp(buf, buf, (char *)0);
err_ret("couldn't execute: %s", buf);
exit(127);
}/* parent */
if ((pid = waitpid(pid, &status, 0)) < 0)
err_sys("waitpid error");
printf("%% ");
}
exit(0);
}
4.线程和线程ID(略)
5.出错处理:
当unix函数出错时,常常返回一个负值,而且整型变量errno通常被设置为含有附加信息的一个值。
对于errno应当知道两条规则:第一条规则:如果没有出错,则其值不会被一个例程清除。因此,仅当函数的返回值指明出错时,才检验其值。 第二条是:任一函数都不会将errno值设置为0,在<errno.h>中定义的所有常量都不为0.
C标准定义了两个函数,它们帮助打印出错信息
#include <string.h>
char * strerror(int errnum); 返回值:指向消息字符串的指针
perror函数基于errno的当前值,在标准出错上产生一条出错信息,然后返回
#include <stdio.h>
void perror(const char * msg)
它首先输出由msg指向的字符串,然后是一个冒号,一个空格,紧接着是对应于errno值的出错的信息,最后是一个换行符。
eg:
#include "apue.h"
#include <errno.h>
int main(int argc, char *argv[])
{
fprintf(stderr, "EACCES: %s\n", strerror(EACCES));
errno = ENOENT;
perror(argv[0]);
exit(0);
}
6.用户标识符
#include "apue.h"
int main(void)
{
printf("uid = %d, gid = %d\n", getuid(), getgid());
exit(0);
}
7.信号
当向一个进程发送信号时,我们必须是该进程的所有者超级用户
8 时间值
长期以来,linux有两种不同的时间值
日历时间:该值是1970年1月1日00:00:00以来国际标准时间(UTC)所经过的秒数累计值,这些时间值可用来记录文件最近一次的修改时间等。系统基本数据类型time_t用来保存这种时间值
进程时间:也被称为CPU时间,进程时间以时间滴答来计算。历史上曾经每秒钟为50,60,100个滴答。系统基本数据类型clock_t用于保存这种时间值。可以用sysconf 函数获得每秒钟的滴答数
当度量一个进程的执行时间,UNIX系统使用三个进程时间值:时钟时间 用户CPU时间 系统CPU时间
9.系统调用和库函数区别和联系(略)
- 第一章 UNIX基础知识
- 第一章 UNIX基础知识
- APUE第一章 UNIX基础知识
- 第一章 Unix基础知识
- APUE第一章 Unix基础知识
- 第一章 unix基础知识
- AUPE学习第一章------UNIX基础知识
- 【APUE】1、第一章UNIX基础知识
- 《apue》读书笔记 第一章 UNIX基础知识
- APUE学习: 第一章, Unix基础知识
- [APUE]第一章UNIX基础知识总结
- AUPE学习第一章------UNIX基础知识1
- apue学习笔记(第一章UNIX基础知识)
- APUE3学习笔记-第一章-UNIX基础知识
- APUE-第一章学习-UNIX基础知识-习题
- (apue学习)第一章 UNIX基础知识
- Unix环境高级编程——第一章-UNIX基础知识
- 读书笔记——《UNIX环境高级编程》第一章_UNIX基础知识
- 第十一章 项目沟通管理
- cognos
- 第十二章 项目风险管理
- 第十三章 项目采购管理
- 应用层协议分析-HTTP
- 第一章 UNIX基础知识
- 第三章 文件 I/O
- 表设计的原则与方法分析:追求表价值的最大化
- 第四章 文件和目录
- 第五章 标准I/O库
- Minifilter的动态安装、加载及卸载
- 第六章 系统数据文件和信息
- 第七章 进程环境
- 第8章 进程控制