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

74 阅读8分钟

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


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


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


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


成功截图如下:


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


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


执行成功如下:  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/82a221038a144548ad8f09c58d1ffb78~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=mHukhktEIBU%2FpNx8fBrwMK6nOmQ%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/61b27d4d68424dada7747035820e5f75~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=Jr9kQwCHJDjibuO%2FmdojR1HFzO8%3D)


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


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


`sudo make`进行编译。  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5a3cc00ea4274bc88ef4467ba8bccf79~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=mZLmKtWGXLvVt858U1A75ZcTYIk%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/cbdfc8046f1f415e92ce0ecec2df4faf~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=yh%2BNhvcEZAvvrerb171uP0By37M%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f3041eb9c58b4009a715b5852f25051b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=mu0MXUtxpOhk8VJoz%2BeqslvnBRE%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/d3f5f686335c474d88d1c58d744b22d1~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=%2FXLAoMFQ1kgLHYV3MnF2ee29bFE%3D)


`sudo make`执行。  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e31b72b8ff554eee9d82e073c10e8917~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=ELuqBH3sQ85viZlhrb8H42LxlG4%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5e82b148016f4c3eae3ed66eee77e498~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=Tl7xXGE8E86ntGLbbokFcyCykVA%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/88876023642c48788f0deec3aabff769~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=Y9uidWtyMlCD3KEgj9R50ap4frs%3D)


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


`sudo cat -n ./stdio/buf.c | grep "_flag"`看一下`_flag`在`./stdio/buf.c`中的位置。  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/fb3357f5d66440d98b5ecf283b7ad5fc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=V0B6z7oVGKozQniNjJ%2Fy14yIeQI%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2061aeed2d41448a9b42cfa236a306af~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=owkY2OXoGe9a7jehIYt6JvNJthY%3D)


`sudo make clean && sudo make`执行。  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c835d4edba6741a691cc726d80b039d6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=xHOyTJvqolLRosu3HgfI8ospxLg%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4d765c8c4c994a3c81aa5ffa997b0896~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=JFfLHDDdLfNH80dxigKSJ4T7%2ByY%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/1886def458164266acd3a426d8309535~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=14G3%2F9QIXfNVuyfqgwbQnp9LJSc%3D)


`sudo make clean && sudo make`执行。  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c66b65aa32a84535a8c263bfc7f961c4~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=uP2P6aobXKTxQ1rEGyB1IhSk3WQ%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/d46b3cb81fc84fbfb7fa1283c5e009cd~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=3ZIREUCixNtEChN0cm5SrHyKGVs%3D)


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


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


完成如下:  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5082506998f24b5585ce3582c305f788~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=RQYSC48pjeA%2FktRGf2cPWbU%2BRaQ%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a800a2ec5d124284b9220a4d5379b35e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=X7gmQdylxZ%2BeCQBpZXZ0nrqWYY8%3D)  
 `sudo apt-get install -y libbsd-dev`安装`libbsd-dev`。  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/eaf6048bdf74428b91cbd7e9b93ba167~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=1GligAJgMNbvL7%2BxYNZOdWcQiFM%3D)  
 `sudo wget http://www.apuebook.com/src.3e.tar.gz`下载源代码。  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/14a46811538742a8949ad66d02789d8c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=pyZim%2FXbkRarjTccpY4XjHFL0UM%3D)


`sudo tar xf src.3e.tar.gz`进行解压,`cd apue.3e/`进入到解压的源代码目录里边。  
 ![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8cdcd41b3b7844fb8377821342fc2df5~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=dpl97LnZH7sFS%2Fah253G%2BidOMOk%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/55cac8cf3b3043048c99b508d87eee61~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=y0YAsB6GVykouY5F5dEJHDxD2BA%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://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/43ee0a1a1b1f4f7aa0ba2927ecc0c38d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=qZkAedmVwlwZ8b60BpHrcHXMwzQ%3D)


需要把下边的内容删除:



![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f1af55945fea4295acc532d96baf92ab~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=9405%2B0GgyeZ7akJneZAlBeO9bbk%3D)
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ea44808710ce4fb097915fd546360df8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771251287&x-signature=bPgoLnSKWURcdCBAIVX1RChMdl0%3D)

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

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

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