0.目录 1.概念 2.系统资源 3.学习方法 4.从用户的角度来理解 Unix 4.1 登录--运行程序--注销 4.2 目录操作 4.3 文件操作 5.从系统的角度来理解 Unix 5.1 网络桥牌 5.2 bc:Unix 的计算器 5.3 从 bc/dc 到 Web 6.小结 1.概念 概念: Unix 系统包含用户程序和系统内核 内核由多个子系统构成 内核管理所有的程序和资源 进程之间的通信对 Unix 程序是很重要的 什么是系统编程 相关命令: bc 一些术语: 内存空间用来存放程序和…
测试logfilec.c的时候,有个sendto(sock,msg,strlen(msg),0,&addr,addrlen),编译时提示: logfilec.c:30: warning: passing argument 5 of ‘sendto’ from incompatible pointer type 但是书上是这样写的,在stackoverflow搜了一下,原来是: 需要进行一个转换. 另外才注意到C语言中单引号可转义可不转. 需要用curses库的测试hello1.c,发现没有,需要…
本来只打算读这本书socket等相关内容,但书写得实在好,还是决定把其余的内容都读一下. 阅读联机帮助的一个示例: open系统调用: read系统调用: Unix的time: 上面的printf可以看到,一个临时的char* 指针也可以+4,希望查看ctime函数里面是否有malloc,如果有的话由谁来释放内存???没有的话为什么可以指针操作. 为解决上述疑惑,通过查看http://www.cplusplus.com/reference/ctime/ctime/以及及http://www.cp…
同一接口不同的数据源: 协同进程: fdopen以文件描述符为参数: fopen和popen: 为了实现popen,必须在子进程中调用sh,因为只有shell本身即/bin/sh可以运行任意shell命令: popen的实现: 访问数据: 系统调用socket创建一个socket:   htons(16位).htonl(32位).ntohs.ntohl这些函数用于网络字节序与主机字节序转换.名字由来:host to network long. connect: 使用SIGCHLD来阻止僵尸问题:…
execvp在程序中启动新程序: 用fork创建新进程: forkdemo2代码: 测试fork的时候参考<Linux权威指南>阅读笔记(3)  使用了patch: [root@localhost programming]# diff -c forkdemo2.c forkdemo2_new.c > forkdemo2.patch [root@localhost programming]# patch < forkdemo2.patch patching file forkdemo…
0.目录 1.more 能做什么? 2.more 是如何实现的? 3.实现 more 3.1 more01.c 3.2 more02.c 3.3 more03.c 1.more 能做什么? more 可以分页显示文件的内容.正常运行后 more 会显示文件第一屏的内容,在屏幕的底部,more 用反白字体显示文件的百分比,这时如果按空格键,文件的下一屏内容会显示出来,如果按回车键,显示的则是下一行,如果输入"q",结束显示,如果输入"h",显示出来的是 more 的联…
UNIX环境高级编程(第3版) Advanced Programming in the UNIX Environment Linux/UNIX系统编程手册 Linux/UNIX系统编程手册 (豆瓣) https://www.amazon.cn/%E5%9B%BE%E4%B9%A6/dp/B00KMR129E UNIX网络编程 W.Richard Stevens https://www.amazon.cn/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC…
本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作,进行进程间的通信等. 系统调用与C语言的函数调用类似.但是系统调用的过程比C语言函数调用复杂,开销也大得多. Linux 的系统调用通过 int 0x80 实现,用系统调用号来区分入口函数.操作系统实现系统调用的基本过程是:应用程序调用库函数(API):API 将系统调用号存入 EAX,然后通过中断…
一 分析 要实现一个shell,需包含3个步骤 1)读入指令 2)指令解析 3)执行指令 1 从键盘读入指令 从键盘读入指令的几个要点: 1)调用getc函数等待并获取用户键盘输入. 2)每一行命令的结束符为'\n',getsline函数就是通过这个结束符来判断用户是否完成指令的输入. #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { ); char* prompt = &qu…
1. more第一版 实现基础功能,显示每一页固定24行文本,“q Enter”退出, “Enter” 下一行, “space Enter”下一页. #include<stdio.h> #include<stdlib.h> #define PAGELEN 5 #define LINELEN 512 //实现基础功能,显示每一页固定24行文本,“q Enter”退出, “Enter” 下一行, “space Enter”下一页. void do_more(FILE *); int s…