《Unix环境高级编程》第三版源代码在CentOS 7、Ubuntu 20(1),2024年最新帮你突破瓶颈

82 阅读8分钟

make[1]: Leaving directory `/code/clanguagecode/apue.3e/threads' make: *** [all] Error 1


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4bd02faaddf24fb0b40713e28a9bec87~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=NfryjvIE2ImsS%2BbGtVzsL13jyKs%3D)


`yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm`。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9e4928adc54a4c51a9a327e64d4b284e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=Oo3umWyzqwvWbqWaXvRYOhRpbio%3D)


`yum install -y libbsd libbsd-devel`安装。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5fcd3261aaaa42b59eba78c7ae18def8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=w3FzYr4%2Finr9LRIhgyoS5bHCJIE%3D)


成功截图如下:


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/513d545a51ba4ab08ec4d108da958561~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=q3ZyWL6FZn8vhKSuueWId%2BKjxdk%3D)


`make`再次执行。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a564957ba41a4cd598d6a8b83b2aade0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=sJx6KHBvggfzw5knLImdkEBc6O4%3D)


执行成功如下:  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/beebafae27144cb89199b9be7cde6627~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=ACjruZXLkH8Rji8dg33qZhpXxT8%3D)


## Ubuntu 20.04 进行编译


`lsb_release -a`看到操作系统的版本是`Ubuntu 20.04.4``uname -r`看到操作系统内核的版本是`5.4.0-100-generic``gcc --version`看到gcc的版本是`9.3.0`。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/dc7c23917d784cd595d5ab3d853a5dc7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=V29GMtshgmjSAe%2FLqy%2BhYpfmBx8%3D)


`sudo wget http://www.apuebook.com/src.3e.tar.gz`下载源代码。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/08ed199a9e684d5eaa8d55f7a77d7bf7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=1pHEOBiOJGPWkLM8mLcpcFdcsXY%3D)


`sudo tar xf src.3e.tar.gz`进行解压,`cd apue.3e/`进入到解压的源代码目录里边。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/d6bd82323fa743349a34172ea264081a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=9aFhCj%2FauQgWEAV9wfttYediwy8%3D)


`sudo make`进行编译。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3a781e16bd09408281aae1a52e6274b7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=fFbGsGcnmomFYgHxiDLqKwOlqcQ%3D)


报错如下:



/usr/bin/ld: /tmp/cc4I3NHz.o: in function main': devrdev.c:(.text+0xc5): undefined reference to minor' /usr/bin/ld: devrdev.c:(.text+0xdb): undefined reference to major' /usr/bin/ld: devrdev.c:(.text+0x128): undefined reference to minor' /usr/bin/ld: devrdev.c:(.text+0x13e): undefined reference to `major' collect2: error: ld returned 1 exit status make[1]: *** [Makefile:18: devrdev] Error 1 make[1]: Leaving directory '/code/clanguagecode/apue.3e/filedir' make: *** [Makefile:6: all] Error 1


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/233034cd75f040179f543b6bce15a005~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=CaZxC3vOaqIXQ7ZJe0QroPZAgIU%3D)


参考博文:[Ubuntu20.04 编译运行apue.3e 避坑指南](https://gitee.com/vip204888)  
 [Unix 环境高级编程书(第三版)源码编译(apue.3e)](https://gitee.com/vip204888)  
 [Unix环境高级编程(第3版)环境搭建](https://gitee.com/vip204888)  
 `sudo cat -n ./filedir/devrdev.c | grep "#endif"`看到`./filedir/devrdev.c`里边只有第4行中有`#endif`这个字符串,`sudo cat -n ./filedir/devrdev.c | grep "#include <sys/sysmacros.h>"`可以看到`./filedir/devrdev.c`文件里边没有`#include <sys/sysmacros.h>`这个头文件。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e6c1e3eaf9f2465c826f7c102c1190fe~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=02t2sMuivLOE%2FmbpCGUo2VoFv8Y%3D)


`sudo sed -i 's:#endif:#endif\n#include <sys/sysmacros.h>:g' ./filedir/devrdev.c`文件里边的字符串`#endif`下添加`#include <sys/sysmacros.h>`一行头文件,`sudo cat -n ./filedir/devrdev.c | grep "#include <sys/sysmacros.h>"`可以看到`#include <sys/sysmacros.h>`添加到`./filedir/devrdev.c`5行了。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/d58b08abec834bfc9ee864569a78c8da~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=OPOBtP7zgcyGLPwiRm1XIhmjJSo%3D)


`sudo make`执行。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/29c5fe8b0ec24936b2a324ce981313c0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=eL2WDJUegYOAv%2FYUeTMdeOXewLU%3D)


发现报错如下:



gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE buf.c -o buf -L../lib -lapue buf.c: In function ‘is_unbuffered’: buf.c:90:15: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’? 90 | #define _flag __pad[4] | ^~~~~ buf.c:98:13: note: in expansion of macro ‘_flag’ 98 | return(fp->_flag & _IONBF); | ^~~~~ buf.c: In function ‘is_linebuffered’: buf.c:90:15: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’? 90 | #define _flag __pad[4] | ^~~~~ buf.c:104:13: note: in expansion of macro ‘_flag’ 104 | return(fp->_flag & _IOLBF); | ^~~~~ buf.c: In function ‘buffer_size’: buf.c:92:15: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’? 92 | #define _base __pad[2] | ^~~~~ buf.c:111:13: note: in expansion of macro ‘_base’ 111 | return(fp->_base - fp->_ptr); | ^~~~~ buf.c:91:14: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’? 91 | #define _ptr __pad[1] | ^~~~~ buf.c:111:25: note: in expansion of macro ‘_ptr’ 111 | return(fp->_base - fp->_ptr); | ^~~~ buf.c: In function ‘is_unbuffered’: buf.c:99:1: warning: control reaches end of non-void function [-Wreturn-type] 99 | } | ^ buf.c: In function ‘is_linebuffered’: buf.c:105:1: warning: control reaches end of non-void function [-Wreturn-type] 105 | } | ^ buf.c: In function ‘buffer_size’: buf.c:115:1: warning: control reaches end of non-void function [-Wreturn-type] 115 | } | ^ make[1]: *** [Makefile:16: buf] Error 1 make[1]: Leaving directory '/code/clanguagecode/apue.3e/stdio' make: *** [Makefile:6: all] Error 1


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/36d89eff20fb45d7b517f7efcc91b025~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=L67xlaTHUiC142PLmrzN0OE2CJ0%3D)  
 需要把下边的内容删除:



#ifdef _LP64 #define _flag __pad[4] #define _ptr __pad[1] #define _base __pad[2] #endif


可以直接使用`vim`找到上边的内容,然后进行删除。但是我这里采取`sed`的删除方法,接下来的操作就是为了删除上边的内容,`sudo sed -n '89,+4p' ./stdio/buf.c`可以看到上边的内容是在89~93行。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/113a46869fad45e6b07793b7d3dc3a31~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=ZMFUB618Wj29gm1HCQtH1f%2F%2FE5E%3D)


`sudo sed '89,93d' ./stdio/buf.c > ./stdio/buf_bak.c`可以把89~93行删除之后的内容保存到`./stdio/buf_bak.c`。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/299992d84b31485899b427fb29642678~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=xg4iTT8pSju5%2FehOFJhlZS9uKD8%3D)


`sudo rm -rf ./stdio/buf.c``./stdio/buf.c`文件删除,`sudo cp ./stdio/buf_bak.c ./stdio/buf.c``buf_bak.c`更名为`buf.c``sudo sed -n '89,+4p' ./stdio/buf.c`可以看到89~93行内容已经更改了。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2f57345aaf454c668c157de507dc59c8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=cNzC9vWofkDN5r5mFZR6maobRLU%3D)


`sudo cat -n ./stdio/buf.c | grep "_flag"`看一下`_flag``./stdio/buf.c`中的位置。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f0e93eaa1da74f599308b65284f3bebb~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=5d%2FZ8I%2ByWjH7KhcqBkAfv5XiSSU%3D)


 `sudo sed -i 's:return(fp->_flag \& _IONBF);:return(fp->_flags \& _IONBF);:g' ./stdio/buf.c``return(fp->_flag \& _IONBF);`替换为`return(fp->_flags \& _IONBF);`,将`fp->_flag`后加个`s``sudo sed -i 's:return(fp->_flag \& _IOLBF);:return(fp->_flags \& _IOLBF);:g' ./stdio/buf.c``return(fp->_flag \& _IOLBF);`替换为`return(fp->_flags \& _IOLBF);`,将`fp->_flag`后加个`s`。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/695b743cc38d4129b25b747abc115ee7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=eJMNthYRbkBr2uOGWGWWN3DmAik%3D)


`sudo make clean && sudo make`执行。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/94d72d8edf014ea98557c912eaa8991f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=hfl4Dd0JGpgxixSCMdPOM5mply4%3D)


发现报错如下:



buf.c: In function ‘buffer_size’: buf.c:106:11: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_base’ 106 | return(fp->_base - fp->_ptr); | ^~ buf.c:106:23: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_ptr’ 106 | return(fp->_base - fp->_ptr); | ^~ buf.c:110:1: warning: control reaches end of non-void function [-Wreturn-type] 110 | } | ^ make[1]: *** [Makefile:16: buf] Error 1 make[1]: Leaving directory '/code/clanguagecode/apue.3e/stdio' make: *** [Makefile:6: all] Error 1


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/71a82e772c0740e9bb95b281789d0312~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=bqedkoBz7a7yyAESDyftAjO6wss%3D)


`sudo sed -i 's:return(fp->_base - fp->_ptr);:return(fp->_IO_buf_end - fp->_IO_buf_base);:g' ./stdio/buf.c`将`return(fp->_base - fp->_ptr);`替换为`return(fp->_IO_buf_end - fp->_IO_buf_base);`。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/6d2bb3a84389403496b8ee77a8811485~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=ZuoW9cbpchYdhk%2BukvuqvoHdCro%3D)


`sudo make clean && sudo make`执行。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9a3ea9bdd67e4a70b6825cc44715504b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=1zZm3qqqXq7qg23CwBDuzjlvpzU%3D)


发现报错



/usr/bin/ld: cannot find -lbsd collect2: error: ld returned 1 exit status make[1]: *** [Makefile:31: badexit2] Error 1 make[1]: Leaving directory '/code/clanguagecode/apue.3e/threads' make: *** [Makefile:6: all] Error 1


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5aca28fd124b4f5f90129b352c5d805c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=oqK1bflghK6CcBh3nYKrQCpuQXE%3D)


`sudo apt-get install -y libbsd-dev`安装`libbsd-dev`。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/92cc0682f8ee4d098b8be1c26c4888e0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=GKFSZI1fvA463AzUa9NVfNPxo7c%3D)


`sudo make clean && sudo make`执行。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5cd8689cddd64721960a97e5b2bc7fbb~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=8rRzPqnG1JLobmWPF2lysuYEpXQ%3D)


完成如下:  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2d328b9b8ce24cdfb5a94d87abe376e8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=jgACLcVz1SBY8NNkhVyc3eTawa8%3D)


## Ubuntu 22.04 进行编译


`lsb_release -a`看到操作系统的版本是`Ubuntu 22.04 LTS``uname -r`看到操作系统内核的版本是`5.15.0-86-generic``gcc --version`看到gcc的版本是`11.2.0`。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/fd4045fd7c774bcc9467282ef4fb8c49~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=5qUkofM4NLFfdtQ69f99oTEYjAE%3D)  
 `sudo apt-get install -y libbsd-dev`安装`libbsd-dev`。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/cefa948a43a74f4189b1ab2efbc02d09~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=HUKFeK47wqgaPE2gb4RJHzqSyAk%3D)  
 `sudo wget http://www.apuebook.com/src.3e.tar.gz`下载源代码。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0add64805e3d4c33831c37a2400c105b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=4coCaxudHTtg5n25fRYqV9oTsUI%3D)


`sudo tar xf src.3e.tar.gz`进行解压,`cd apue.3e/`进入到解压的源代码目录里边。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b79de63fcac64f93b82749b3ed515574~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=j7zEZigOQzUjph7iuYBHE8%2BoKus%3D)


`sudo cat -n ./filedir/devrdev.c | grep "#endif"`看到`./filedir/devrdev.c`里边只有第4行中有`#endif`这个字符串,`sudo cat -n ./filedir/devrdev.c | grep "#include <sys/sysmacros.h>"`可以看到`./filedir/devrdev.c`文件里边没有`#include <sys/sysmacros.h>`这个头文件。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/665696f4e61a43f4818e08e14e8b8e56~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=h8yje3y%2BcUMbPtj0ASlpmO%2F%2F%2F%2FA%3D)


`sudo sed -i 's:#endif:#endif\n#include <sys/sysmacros.h>:g' ./filedir/devrdev.c`文件里边的字符串`#endif`下添加`#include <sys/sysmacros.h>`一行头文件,`sudo cat -n ./filedir/devrdev.c | grep "#include <sys/sysmacros.h>"`可以看到`#include <sys/sysmacros.h>`添加到`./filedir/devrdev.c`第5行了。  
 ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f94756c6d8d44fd7a47bf2edfaadef0e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=XjqoUnGVAyAM%2BTxgPzrKcXvAj7w%3D)


需要把下边的内容删除:



![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9ab57315e8e348b09d320602861122b6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=aNAa%2Brk1HjBkCI7qBXidDBjZFP0%3D)
![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f6274d61d665493894c2cf8ac1d30e37~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773065794&x-signature=Hivxp0%2BYPIHtKyagTe65LjhYesM%3D)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**