使用Ubuntu搭建apue环境的绝佳姿势,附带一系列工具操作 |
您所在的位置:网站首页 › ubuntu下编译c项目 › 使用Ubuntu搭建apue环境的绝佳姿势,附带一系列工具操作 |
一 、前言
最近在研究国外非常受欢的迎知名计算机课程CS631 - APUE,其中配合使用的书籍是《UNIX环境高级编程》一书。目的在于更好的了解类Unix下系统软件(比如一些经常用到的系统命令ls、mv、cat等等)的实现。以及高级 I/O、文件、信号、 进程关系和进程间通信怎么工作。 在官方课程教学中使用的是NetBSD 9.2系统。对于不想新安装一个虚拟机系统来占用磁盘,或者就想在Ubuntu下进行研究学习的。前期一些必要的工作可以方便后面更好的实践自己的代码。 为了能快速的查看编辑一些源码。也介绍了一下如何通过Windows的Clion编辑虚拟环境代码,以及ssh连接访问虚拟机系统。 本次使用环境 VMware 16 Ubuntu 20.04本次使用软件 clion Tabby Terminal sshd samba cmake make gcc 二 、apue下载编译及遇到的问题 1. 下载apue wget http://www.apuebook.com/src.3e.tar.gz tar -zxvf src.3e.tar.gz 2. 安装bsd库为了使用BSD的实现的C语言标准库,如想要在课程中验证或者使用NetBSD系统源码的一些实现,也可能会用到。 sudo apt-get install libbsd-dev安装好后可以在/usr/include/bsd 目录下找到一些如stdio.h头文件 使用BSD目录的头文件 #include int main(int argc, char *argv[]) { setprogname(argv[0]); }上面面C代码中,使用使用setprogname()函数,在ubuntu默认c标准库上的stdlib.h中是没有这个函数的。
如何链接到使用bsd库的函数 gcc -c test.c -o test.o -lbsd 3. 编译apue源码进入到apue解压目录 运行make,出现如下错误
打开apue.3e/include目录下的apue.h文件,在其中添加#include 再次make,出现
将buf.c文件的95-121行换成下面代码 int is_unbuffered(FILE *fp) { return(fp->_flags & _IONBF); } int is_linebuffered(FILE *fp) { return(fp->_flags & _IOLBF); } int buffer_size(FILE *fp) { #ifdef _LP64 return(fp->_IO_buf_end - fp->_IO_buf_base); #else return(BUFSIZ); /* just a guess */ #endif } #else #error unknown stdio implementation! #endif也可以直接克隆我修改后的代码 apue.3e-ubuntu20.04 (github.com),再次make,应该就不会有错误了。 最后将apue.h头文件和库文件libapue.a复制到系统目录下。就可以使用了。 sudo cp /path/to/apue.3e/lib/libapue.a /usr/lib sudo cp /path/to/apue.3e/include/apue.h /usr/include在编译的时候-lapue链接库 gcc -c test.c -o test.o -lapue 三 、设置虚拟机网络 主机网络信息
根据主机网络信息,网段,选择给虚拟机分配一个固定IP,子网掩码和网关跟主机一样。便于后面主机使用ssh连接虚拟机。
3. 启动 sshd 服务: sudo systemctl start sshd如果您使用的是旧版 Ubuntu,则需要将 start 替换为 restart。 验证服务是否成功启动: sudo systemctl status sshd如果服务已成功启动,则状态应显示为 "active (running)" 启用 sshd 开机自启动: sudo systemctl enable sshd6. 确认 sshd 是否已添加到开机启动项: sudo systemctl is-enabled sshd Tabby连接虚拟机 1. 下载并安装 Tabby从 tabby.rs 的官方网站下载 Tabby,根据您的操作系统选择适当的安装包进行下载和安装。 2. 打开终端并启动 Tabby, 创建新会话配置和连接 -> 新建配置 -> 搜索ssh
在弹出的 "Connection" 窗口中输入连接参数: "Host": 输入虚拟机的IP地址或主机名。 "Port": 输入 SSH 服务监听的端口,默认为22。 "Username": 输入虚拟机上的用户名,用于身份验证。 "Authentication": 设置身份验证方式。可以选择密码验证、密钥文件验证等。完成参数配置后,选择想要连接的虚拟机即可。 系统将提示您输入一个管理员密码。请确保使用强密码以保护您的系统。 3. 安装完成后打开smb.conf文件并进行配置。您可以使用以下命令来打开smb.conf文件: sudo nano /etc/samba/smb.conf然后,您可以通过修改文件中的参数来配置Samba服务器,例如共享目录、访问权限等。 最末添加内容如: [Project] comment = project path = /home/xxx # 此处为你想要在虚拟机分享的文件路径 browseable = yes writable = yes create mask = 0700 directory mask = 0700 valid users = xxxname # 一个名字 force user = xxxname force group = xxxname public = yes available = yes 4. 配置完毕后运行以下命令重启Samba服务: sudo service smbd restart后续操作 sudo smbpasswd -a # 和smb.config中user对应 sudo systemctl restart smbd sudo systemctl enable smbd sudo systemctl enable smbd # 开机自启(可选) 5. 在windows访问Ubuntu samba服务Win+r 输入网络配置的虚拟机ip,如
解决办法:win+r 输入gpedit.msc 1.找到计算机配置---管理模板---网络---Lanman工作站 2.找到“启用不安全的来宾登录"。 3.选择启用 4.将其固定到快速访问 右键 -> 选择映射网路文件夹,选择一个就行
此处打开Clion,你就可以看见前面通过samba共享的文件目录了。 settings -> toolchains 添加一个配置环境 -> cedentials 右侧添加ssh配置 -> 按照前面tabby ssh连接差不多设置 设置远程编译器在toolchain的剩余选项中,设置好cmake,make,g++,gcc GDB等路径即可。 配置代码Deployment 选择SFTP,设置好远程环境根目录../01_basic/01_ls.c 文件,模仿ls命令的简单实现 #include "apue.h" #include #include int main(int argc, char *argv[]) { setprogname(argv[0]); DIR *dp; struct dirent *dirp; if (argc != 2) err_quit("usage: %s directory_name", getprogname()); // 打开arg[1]目录,赋值给dp目录指针 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、使用gcc编译 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |