# Linux Kernel開發學習日誌2020.1.29 ###### tags: `linux2020` `C` ## 加解密程式 ### Understanding the file Permissions http://linuxcommand.org/lc3_lts0090.php ### Understanding four FILE type in ```<stdio.h>``` * how to read and write a simple txt file. * Function: * fwrite * nread * fopen * fclose ```cpp=1 #include <stdio.h> #include <stdlib.h> #include <stdint.h> uint32_t reverse_bit(uint32_t x) { x = ((x & 0xffff0000) >> 16) | ((x & 0x0000ffff) << 16); x = ((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8); x = ((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4); x = ((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2); x = ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1); return x; } int main(int argc, char *argv[]) { if (argc < 3) { printf( "\nUsage:" "\t %s input.txt output.txt\n\n" "This is a simple encrypt/decrypt app " "based on reverse_bit algorithm.\n\n" , argv[0]); return 0; } const char *input_path = argv[1]; FILE *fin = fopen(input_path, "rb"); if (!fin) { fprintf(stderr, "ERROR: failed to open input file %s\n", input_path); exit(-1); } const char *output_path = argv[2]; FILE *fout = fopen(output_path, "wb"); if (!fout) { fclose(fin); fprintf(stderr, "ERROR: failed to open output file %s\n", output_path); exit(-1); } uint32_t ch; int nread; while((nread = fread(&ch, 1, sizeof(uint32_t), fin)) > 0) { /* if read size less than sizeof(uint32_t), just write it */ if (nread < sizeof(uint32_t)) { fwrite(&ch, 1, nread, fout); } else { uint32_t chn = reverse_bit(ch); fwrite(&chn, 1, nread, fout); } } fclose(fin); fclose(fout); return 0; } ``` ## Linux file Permissions: * Keywords: * chmod: change file permissions * chown: change ownership * chgrp: change group ### Ownership of Linux files: Every file and directory on your Unix/Linux system is assigned 3 tyeps of owner. **User:** * A user is the owner of the file. * By default, the person who created a file becomes its owner. * Hence, a user is also sometimes called an owner. **Group:** * A user-group can contain multiple users. * All users belonging to a group will have the same access permissions to the file. * Suppose you have a project where a number of people require access to a file. Instead of manually assigning permissions to each user, you could add all users to a group, and assign group permission to file such that only this group members and no one else can read or modify the files. **Other:** * Any other user who has access to a file. * This person has neither created the file, nor he belongs to a usergroup who could own the file. * It means everyone else. ### 參考資料 [課前測驗參考解答: Q1](/@sysprog/ByzoiggIb?type=view) [File Permissions][1] [1]:https://www.guru99.com/file-permissions.html