在 macOS 上运行 APUE 的实例
去露营的时候怕无聊,@soasme 给我带了 UNIX环境高级编程。露营的时候并没有看多少,回来开始敲书里的代码,想试着运行一下,发现 gcc 报错啦,于是开始捣鼓。两天过去了,终于搞定啦,感谢某人的帮忙,记录一下下。
在已经安装了 Dokcer 的基础上,做的事情主要包括:
- 下载 apue.3e 的代码
- 构建 docker image
- docker run 并编译
代码实例, 文件 myls.c 如下:
#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", argv[1]);
while((dirp = readdir(dp)) != NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
exit(0);
}
Define a container with Dockerfile
在下载了apue源码的目录下,创建 Dokcerfile 如下:
# pull centos
FROM centos
# install core development tools such as gcc, make
RUN yum groupinstall -y 'Development Tools'
# install the latest elrepo-release 是为了 install libbsd
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# install libbsd
RUN yum install -y libbsd-devel
另外,可以把不需要构建的文件写入到 .dockerignore 就跟 .gitignore一样。
然后 creates image
docker build -t image-apue .
run
run 并 bind mount
docker run -it --name container-apue --mount type=bind,source="$(pwd)",target=/home image-apue
make
gcc -o myls myls.c -I apue.3e/include/ -L apue.3e/lib/ -lapue
好了,可以开始学习了~