{"id":16843774,"url":"https://github.com/stevelauc/the-linux-programming-interface","last_synced_at":"2025-04-11T05:53:45.196Z","repository":{"id":41186517,"uuid":"506609911","full_name":"SteveLauC/The-Linux-Programming-Interface","owner":"SteveLauC","description":"Src of The Linux Programming Interface and its Rust implementation (Exercise included)","archived":false,"fork":false,"pushed_at":"2023-11-19T07:16:48.000Z","size":7962,"stargazers_count":7,"open_issues_count":5,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T05:53:36.594Z","etag":null,"topics":["c","linux","rust","system-programming"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SteveLauC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-23T11:20:11.000Z","updated_at":"2023-07-20T13:29:36.000Z","dependencies_parsed_at":"2025-02-18T21:43:53.770Z","dependency_job_id":null,"html_url":"https://github.com/SteveLauC/The-Linux-Programming-Interface","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteveLauC%2FThe-Linux-Programming-Interface","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteveLauC%2FThe-Linux-Programming-Interface/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteveLauC%2FThe-Linux-Programming-Interface/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteveLauC%2FThe-Linux-Programming-Interface/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SteveLauC","download_url":"https://codeload.github.com/SteveLauC/The-Linux-Programming-Interface/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248351405,"owners_count":21089271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","linux","rust","system-programming"],"created_at":"2024-10-13T12:53:38.570Z","updated_at":"2025-04-11T05:53:45.171Z","avatar_url":"https://github.com/SteveLauC.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The-Linue-Programming-Interface\nSrc of The Linux Programming Interface and its Rust implementation (Exercise included)\n\n#### Chapters and their corresponding directories\n|Chapter|Src Directory|Exercise Directory|\n|-------|-------------|------------------|\n|3 System Programming Concepts|[lib](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/lib)|[Ch3](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch3)|\n|4 File I/O: The Universal I/O Model|[fileio](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/fileio)|[Ch4](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch4/)|\n|5 File I/O: Further Details|[fileio](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/fileio)|[Ch5](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch5)|\n|6 Processes|[proc](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/proc)|[Ch6](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch6)|\n|7 Memory Allocation|[memalloc](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/memalloc)|[Ch7](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch7)|\n|8 Users and Groups|[users_groups](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/users_groups)|[Ch8](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch8)|\n|9 Process Credentials|[proccred](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/proccred)|[Ch9](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch9)|\n|10 Time|[time](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/time)|[Ch10](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch10)|\n|11 System Limits And Options|[syslim](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/syslim)|[Ch11](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch11)|\n|12 System And Process Information|[sysinfo](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/sysinfo)|[Ch12](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch12)|\n|13 File I/O Buffering|[filebuff](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/filebuff)|[Ch13](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch13)|\n|14 File Systems|[filesys](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/filesys)|[Ch14](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch14)|\n|15 File Attributes|[files](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/files)|[Ch15](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch15)|\n|16 Extended Attributes|[xattr](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/xattr)|[Ch16](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch16)|\n|17 Access Control Lists |[acl](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/acl)|[Ch17](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch17)|\n|18 Directories and Links|[dirs_links](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/dirs_links)|[Ch18](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch18)|\n|19 Monitoring File Events|[inotify](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/inotify)|[Ch19](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch19)|\n|20 Signals: Fundamental Concepts|[inotify](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/signals)|[Ch20](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch20)|\n\n\n#### What are unimplemented/skipped in Src\n|Chapter| Name| Reason| Relevant Issue|\n|-------|-----|-------|---------------|\n|6|[mem_segments.rs](https://github.com/SteveLauC/The-Linux-Programming-Interface/blob/main/proc/mem_segments.c)|Rust does not allow global variables to be unitialized, thus we can not allocate variable in .bss segment|None|\n|6|[longjmp.rs](https://github.com/SteveLauC/The-Linux-Programming-Interface/blob/main/proc/longjmp.c)|Relevant syscalls are [missing](https://github.com/rust-lang/libc/issues/1208) in `libc`|[#1](https://github.com/SteveLauC/The-Linux-Programming-Interface/issues/1)|\n|6|[setjmp_vars.rs](https://github.com/SteveLauC/The-Linux-Programming-Interface/blob/main/proc/setjmp_vars.c)|Relevant syscalls are [missing](https://github.com/rust-lang/libc/issues/1208) in `libc`|[#1](https://github.com/SteveLauC/The-Linux-Programming-Interface/issues/1)|\n|8|[check_passwords-rs](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/users_groups/check_password-c)|`crypt(3)` is not exposed in `libc`|[#3](https://github.com/SteveLauC/The-Linux-Programming-Interface/issues/3)|\n|10|[calendar_time-rs](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/time/calendar_time.c)| `ctime(3)` and `asctime(3)` are not exposed in `libc`| [#4](https://github.com/SteveLauC/The-Linux-Programming-Interface/issues/4)|\n|10|[strtime-rs](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/time/strtime.c)|`strftime(3)` and `strptime(3)` are not exposed in `libc` | [#5](https://github.com/SteveLauC/The-Linux-Programming-Interface/issues/5)|\n|10|[showtime-rs](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/time/show_time.c)|`strftime(3)` and `asctime(3)` are not exposed in `libc` | None |\n|10|[process_time-rs](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/time/process_time.c)|`clock(3)` is not exposed in `libc` | None |\n\n\n#### What are unimplemented/skipped in Exercise\n|Chapter| Exercise| language|Reason|Relevant Issue|\n|-------|---------|---------|------|--------------|\n|4|[4-2](https://github.com/SteveLauC/The-Linux-Programming-Interface/blob/main/exercise/Ch4/4-2)|C and Rust|Currently I am not sure about what is a hole and how to create it, for more info, you can check [this post](https://github.com/SteveLauC/blog/issues/1)|None|\n|6|[6-2](https://github.com/SteveLauC/The-Linux-Programming-Interface/blob/main/exercise/Ch6/6-2)|Rust|`setjmp` and `longjmp` are [missing](https://github.com/rust-lang/libc/issues/1208) in `libc`|[#1](https://github.com/SteveLauC/The-Linux-Programming-Interface/issues/1)|\n|6|[6-3](https://github.com/SteveLauC/The-Linux-Programming-Interface/blob/main/exercise/Ch6/6-3)|Rust|We can [not](https://github.com/rust-lang/libc/issues/2520) directly access `environ` in Rust whereas this is necessary to unset the environment variables that are defined multiple times|[#2](https://github.com/SteveLauC/The-Linux-Programming-Interface/issues/2)|\n|15|[15-7](https://github.com/SteveLauC/The-Linux-Programming-Interface/blob/main/exercise/Ch15/15-7)|Rust|`FS_*` constants are missing from `libc`|None|\n|17|[17-1](https://github.com/SteveLauC/The-Linux-Programming-Interface/blob/main/exercise/Ch17/17-1)|C|I don' want to touch those `acl_xxx_xxx()` functions|None|\n\n#### What can be improved in Exercise\n\n|Chapter|Exercise|Description|Relevant Issue|\n|-------|--------|-----------|--------------|\n|7|[7-2](https://github.com/SteveLauC/The-Linux-Programming-Interface/tree/main/exercise/Ch7/7-2)|The implementation of `free()` can be improved by merging memory fragments|None|\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstevelauc%2Fthe-linux-programming-interface","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstevelauc%2Fthe-linux-programming-interface","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstevelauc%2Fthe-linux-programming-interface/lists"}