* Fundamentals of Software Engineering by Ghezzi, Jazayeri and Mandrioli
* The Practice of Programming by Kernighan & Pike.
* Code Complete by Steve Mcconnell.
* The Unix Programming Environment by Kernighan & Pike
* Advanced Unix Programming by Marc Rochkind.
* C Interfaces and Implementation by David Hanson.
* Large Scale C++ design by John Lakos
* Unix Network Programming by Richard Stevens.
The key is that while reading the above you need to "get" how the code is "structured" rather than the details. For example, how does the code for a TCP server and client "look like"? It is a kind of spatial knowledge which you can then consider as one "module" of functionality and reproduce as needed. Large Systems consist of a bunch of layered and well partitioned modules exposing simple and clean interfaces. There will also be modules which cross-cut all the functional modules like "Error-Handling", "Logging" etc. This is the core of "Software Engineering", everything else is details.
Finally, you would also need to read a book/source where you can see all of the above principles put into practice while building a non-trivial (initially not overly complex) system.