Unix系统编程
mk
新浪微博码农一枚
展开
-
curse库的示例——让Hello world闪烁的自然点
#include #include main(){ //初始化屏幕和tty initscr(); //清屏 clear(); int i; for(i=0;i<LINES;i++){ move(i,i+i); if(i%2==1) standout(); addstr("Hello,wor原创 2011-11-30 00:01:30 · 286 阅读 · 0 评论 -
fork的示例
#include #include #include main(){ int ret_from_fork,mypid; mypid = getpid(); printf("Before:my pid is %d\n",mypid); ret_from_fork = fork(); sleep(1); printf("After:my pid原创 2011-11-30 00:04:05 · 266 阅读 · 0 评论 -
execvp族的示例—所谓旧瓶装新酒
#include #include main(){ char *arglist[3]; arglist[0]="ls"; arglist[1]="-l"; arglist[2]=0; printf("ls -l\n"); execvp("ls",arglist); printf("ls is done\n");}原创 2011-11-30 00:05:48 · 296 阅读 · 0 评论 -
Shell命令编写——shell的雏形
#include #include #include #include //命令行的参数个数#define MAXARGS 20//长度#define ARGLEN 100int main(){ char *arglist[MAXARGS+1]; int numargs; char argbuf[ARGLEN]; char *m原创 2011-11-30 00:07:23 · 243 阅读 · 0 评论 -
Shell命令编写——shell第二版,让shell活下去,新进程装载命令
#include #include #include #include //命令行的参数个数#define MAXARGS 20//长度#define ARGLEN 100int main(){ char *arglist[MAXARGS+1]; int numargs; char argbuf[ARGLEN]; char *m原创 2011-11-30 00:11:27 · 322 阅读 · 0 评论 -
Shell命令编写——查看文件的命令head -n
#include #include #include #include #include #define BUFFERSIZE 4096int main(int ac,char *av[]){ /*创建输入文件的文件描述符*/ int in_fd; int len = sizeof(char); char buf; /*对输入时的参数进行判定*/原创 2011-11-29 23:26:22 · 472 阅读 · 0 评论 -
一个无聊的自动提款机程序---改进版--忽略非法输入
/* * 自动提款机程序,他会问用户很多的yes/no的问题 * * atm.sh * * while true * do * do_a_transaction # run a program * if play_again # run our program * then * continue # if "y" loop原创 2011-11-29 23:48:42 · 770 阅读 · 0 评论 -
curse库的示例——Hello world的开始显示
#include #include main(){ //初始化屏幕和tty initscr(); //清屏 clear(); move(10,20); addstr("Hello,world!"); move(LINES-1,0); //刷新,显示屏幕缓存的内容到真实的屏幕上 refresh(); //等待用户的输入 ge原创 2011-11-29 23:58:13 · 334 阅读 · 0 评论 -
curse库的示例——Hello world反弹起来
#include //左边的边界#define LEFTEDGE 10//右边的边界#define RIGHTEDGE 30//行号#define ROW 10int main(){ char *message = "Hello"; char *blank = " "; int dir = +3; int pos原创 2011-11-30 00:02:41 · 346 阅读 · 0 评论 -
Shell命令编写——查看当前登陆用户的登录时间ac,last
ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连接的时间(小时),如果不使用标志,则报告总的时间.1.键入ac命令,然后按回车键,将显示如下内容: total 496.35 2.键入ac -d命令,然后按回车键,将显示每天的总的连接时间: Aug 12 total 261.87 Aug 13 total 351.39 Aug 14 total原创 2011-11-30 00:42:43 · 837 阅读 · 0 评论 -
Shell命令编写——write,与终端对话
#include #include #include #include /* * 使用格式:write user * 与终端用户的对话 * */int main(int ac,char *av[]){ int fd; char buf[50]; //参数的判断 if(ac != 2){ fprintf(stderr,"usa原创 2011-11-30 14:17:24 · 830 阅读 · 0 评论 -
单进程socket的服务器/客户端模型
1.tcp.h:头文件2.socklib.c:基本的socket模型的实现函数3.server.c:服务器端的模型4.client.c:客户端的模型5.process_request.c:处理客户端的请求6.connect_server.c:与服务端进行通信 1.tcp.h:头文件#include #include #include #include #in原创 2011-11-30 11:27:20 · 528 阅读 · 0 评论 -
socket的服务器/客户端模型——时间服务器的版本演进
客户端的处理程序是相同的talk_with_server_v1(int fd){ //缓存数组 char buf[50]; int n; //从服务端读取50字节的数据到数组 n=read(fd,buf,50); //将数组中的数据写入到标准输出 write(1,buf,n);}服务端的程序1.版本1:单进程版,直接从用time()系统调用读取时间pro原创 2011-11-30 12:05:36 · 331 阅读 · 0 评论 -
curse库的示例——闪烁的hello world
#include #include main(){ //初始化屏幕和tty initscr(); //清屏 clear(); int i; for(i=0;i<LINES;i++){ move(i,i+i); if(i%2==1) standout(); addstr("Hello,wor原创 2011-11-30 00:00:12 · 310 阅读 · 0 评论 -
信号处理的示例
#include #include main(){ void f(int); int i; signal(SIGINT,f); for(i=0;i<5;i++){ printf("hello\n"); sleep(1); }}void f(int signum){ printf("OUCH!\n");}原创 2011-11-29 23:53:36 · 365 阅读 · 0 评论 -
关闭终端回显的示例
#include #include #include /* * 改变回显位的状态 * 通过读取termios的结构中的内容 * * usage:setecho [y|n] * show : how to read,change,reset tty attributes * */ main(int ac,char *av[]){ //包含终端的信息的结构 st原创 2011-11-29 23:52:35 · 1260 阅读 · 0 评论 -
Shell命令编写——复制命令cp
#include #include #include #include #include #define BUFFERSIZE 4096#define COPYMODE 0644int main(int ac,char *av[]){ /*创建输入输出文件的文件描述符*/ int in_fd,out_fd; /*成功读取的字符串的长度*/ int n_chars原创 2011-11-29 23:19:34 · 756 阅读 · 0 评论 -
Shell命令编写——查看当前用户who
#include #include #include #include #include #include #define SHOWHOST/* 引入内核缓冲技术提高读写效率*//* 从/etc/utmp中读取信息*/int main(){ /*read info into here */ /*记录会读入到这里*/ struct utmp *utbufp原创 2011-11-29 23:22:04 · 801 阅读 · 0 评论 -
Linux日志文件utmp、wtmp、lastlog、messages(zz)
1、有关当前登录用户的信息记录在文件utmp中;======who命令 2、登录进入和退出纪录在文件wtmp中;========w命令3、最后一次登录文件可以用lastlog命令察看;4、messages======从syslog中记录信1、有关当前登录用户的信息记录在文件utmp中;======who命令 2、登录进入和退出纪录在文件wtmp中;========w命转载 2011-11-29 23:23:55 · 507 阅读 · 0 评论 -
Shell命令编写——查看文件的命令cat
#include #include #include #include #include #define BUFFERSIZE 4096int main(int ac,char *av[]){ /*创建输入文件的文件描述符*/ int in_fd; /*成功读取的字符串的长度*/ int n_chars; /*字符缓冲区数组*/ char buf[BUFFERS原创 2011-11-29 23:25:24 · 446 阅读 · 0 评论 -
Shell命令编写——查看文件的命令tail -n
#include #include #include #include #include #define BUFFERSIZE 4096int main(int ac,char *av[]){ /*创建输入文件的文件描述符*/ int in_fd; int len = sizeof(char); char buf; char buffer[BUFFERSI原创 2011-11-29 23:27:21 · 1151 阅读 · 0 评论 -
《unix操作系统设计》习题--第3章 数据缓冲区高速缓冲
1.(1)什么是最理想的散列函数? 最理想的散列函数指的是使块能够均匀地分布在一组散列队列中,并且必须简单,以使性能不受损失。 (2)散列函数在它的计算中应该使用逻辑设备号吗? 我们知道,高速缓冲区所用的散列函数为:(设备号^逻辑块号)mod 307 通过设备号和逻辑块号能够唯一的定位一个数据块。原创 2011-11-29 23:28:12 · 1644 阅读 · 0 评论 -
Shell命令编写——显示目录信息ls
#include #include #include #include #include #include #include #include void do_ls(char []);/*将UID转化为用户名*/char *uid_to_name(uid_t);/*将GID转化为组名*/char *gid_to_name(gid_t);/*将mode转换成字符串原创 2011-11-29 23:31:04 · 1098 阅读 · 0 评论 -
Shell命令编写——显示文件的大小filesize
#include #include #include /* * 显示文件的大小 * 通过stat函数获得成员信息 * * */int main(){ struct stat infobuf; if(stat("/etc/passwd",&infobuf)==-1) perror("/etc/passwd"); else printf("This size原创 2011-11-29 23:32:29 · 831 阅读 · 0 评论 -
Shell命令编写——显示到达当前目录的路径pwd
#include #include #include #include #include /* * pwd功能:显示到达当前目录的路径 * * pwd的算法: * 得到"."的i-节点号,称其为n(使用stat) * chdir..(使用chdir) * 找到i-节点号n链接的名字(opendir,readdir,closedir) * * 重复直到到达树的顶端原创 2011-11-29 23:34:13 · 1621 阅读 · 0 评论 -
一个无聊的自动提款机程序
/* * 自动提款机程序,他会问用户很多的yes/no的问题 * * atm.sh * * while true * do * do_a_transaction # run a program * if play_again # run our program * then * continue # if "y" loop原创 2011-11-29 23:41:45 · 262 阅读 · 0 评论 -
一个无聊的自动提款机程序---改进版--修改终端属性
/* * 功能:实现组件2 * * 对用户显示提示问题 * 接受输入 * 如果是y,返回0 * 如果是n,返回1 * */ #include #include #define QUESTION "Do you want another transaction" int get_response(char *); int set_原创 2011-11-29 23:44:09 · 302 阅读 · 0 评论 -
一个无聊的自动提款机程序---改进版——限制用户,超时特征
/* * PLAY_AGAIN.C * 功能:实现组件2 * * 对用户显示提示问题 * 接受输入 * 如果是y,返回0 * 如果是n,返回1 * */ #include #include #include #include #define ASK "Do you want another transaction" /原创 2011-11-29 23:50:23 · 296 阅读 · 0 评论 -
一个无聊的自动提款机程序---最终版——进行信号的处理
/* * 自动提款机程序,他会问用户很多的yes/no的问题 * * atm.sh * * while true * do * do_a_transaction # run a program * if play_again # run our program * then * continue # if "y" loop原创 2011-11-29 23:51:24 · 312 阅读 · 0 评论 -
shell命令实现——bc计算器
我们将程序分为两个部分1.主程序bcmain.c#include "headall.h"/* * 实现bc程序:其主要功能是用来进行加减乘除的运算 * 其本质是一个客户端/服务器的模型 * * +---------+ pipe->dc +----------+ * stdin 0 >============> |原创 2011-12-03 22:02:35 · 884 阅读 · 0 评论