od -tx -tc /*選項和參數*/ hello.c /*當前目錄下的文件的名字*/
選項 | 參數 | 解釋 |
---|---|---|
- A | o | 指定地址基數爲八進制(系統默認) |
- A | d | 指定地址基數爲十進制 |
- A | x | 指定地址基數爲十六進制 |
- A | n | 不打印位移值 |
- t | c | 指定數據的顯示格式爲ASCII字符或反斜槓序列 |
- t | o | 指定數據的顯示格式爲八進制(系統默認) |
- t | d | 指定數據的顯示格式爲有符號十進制數 |
- t | u | 指定數據的顯示格式爲無符號十進制數 |
- t | f | 指定數據的顯示格式爲浮點數 |
- t | x | 指定數據的顯示格式爲十六進制數 |
在選項-t中除了參數c,其餘參數均可在後面加上一個十進制數n,用來指定連續顯示的字節數量html
int open(char *filename,int flags,mode_t mode); //int是文件描述符,文件打開失敗時爲-1,char *filename是文件路徑,int flags是文件訪問方式,包括只讀只寫讀寫,mode_t mode是文件訪問權限使用這個函數時須要添加的頭文件:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
ssize_t read(int fd,const void *buf,size_t n); //ssize_t是讀的字節數,讀不到字符(EOF)的時候爲0,出錯時爲-1,int fd是文件描述符,const void *buf是把讀到的字符放到指針buf所指的內存空間使用這個函數時須要添加的頭文件:
#include <unistd.h>
int close(int fd); //int在關閉文件成時爲0,關閉文件失敗時爲-1,int fd是文件描述符使用這個函數時須要添加的頭文件:
#include <unistd.h>
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> int m,n; openfile(char *filename); closefile(); void main(int argc,char *argv[]) { char temp; char ch[8]; int count1=0; int count2=0; openfile(argv[1]); while(read(m,&temp,1)!=0) { if(count1<7) { if(count1==0) printf(" "); printf("%4x ",temp); ch[count1]=temp; count1++; count2++; } else { printf("%4x ",temp); ch[count1]=temp; count1++; count2++; printf("\n"); printf("%4d ",count2); for(int i=0;i<8;i++) { if(ch[i]=='\n') { printf(" \\n "); } else { printf("%4c ",ch[i]); } } printf("\n"); count1=0; } } if(count1!=0) { printf("\n%4d ",count2); for(int i=0;i<count1;i++) { if(ch[i]=='\n') { printf(" \\n "); } else { printf("%4c ",ch[i]); } } printf("\n"); } closefile(); } openfile(char *filename) { m=open(filename,O_RDONLY,0); if(m==-1) { printf("file open faild!\n"); } /*else { printf("file open successful!\n"); }*/ } closefile() { n=close(m); if(n==-1) { printf("file close faild!\n"); } /*else { printf("file close successful!\n"); }*/ }
od -tx1 -tc hello.c
中,每行打印16個字符,每行開頭還有統計總的字符個數myod
中,用conut1來控制每行打印8個字符,用count2統計總的字符個數od -tx1 -tc hello.c
中,打印格式是一行ascii碼和一行字符相互對應myod
中,用conut1來控制每行打印8個字符,每打印一個字符的ascii碼就用ch數組記錄這個字符,當打印8個字符的ascii碼以後,就換行打印ch數組中的8個字符void main(int argc,char *argv[])
Linux提供了少許的基於Unix I/O模型的系統級函數.它們容許應用程序打開、關閉、讀和寫文件,提取文件的元數據,以及執行I/ O重定向。Linux的讀和寫操做會出現不足值,應用程序必須能正確地預計和處理這種狀況。應用程序不該直接調用Unix I/O函數,而應該使用RIO包,RIO包經過反覆執行讀寫操做,直到傳送完全部的請求數據,自動處理不足值。Linux內核使用三個相關的數據結構來表示打開的文件。描述符表中的表項指向打開文件表中的表項,而打開文件表中的表項又指向v-node表中的表項。每一個進程都有它本身單獨的描述符表,而全部的進程共享同一個打開文件表和v-node表。理解這些結構的通常組成就能使咱們清楚地理解文件共享和I/O重定向。標準I/()庫是基於Unix I/O實現的,並提供了一組強大的高級I/O例程。對於大多數應用程序而言,標準I/ O更簡單,是優於Unix I/O的選擇。然而,由於對標準I/O和網絡文件的一些相互不兼容的限制,Unix I/O比之標準I/O更該適用於網絡應用程序。node
#include "csapp.h" void unix_error(char *msg) void posix_error(int code,char *msg); void gai_error(int code,char *msg); void app_error(char *msg);
unix_error, posix_error和gai_error函數報告Unix風格的錯誤、Posix風格的錯誤和GAI風格的錯誤,而後終止。包括app_error函數是爲了方便報告應用錯誤。它只是簡單地打印它的輸人,而後終止。linux
head
和tail
命令的分析head hello.c/*當前目錄下的文件名稱*/ head -20 hello.c
tail -20 hello.c
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int m,n; void fileopen(char *filename); void fileclose(); void main(int argc,char *argv[]) { char temp; int count1,count2; count2=0; count1=atoi(argv[1]); fileopen(argv[2]); while(read(m,&temp,1)!=0) { if(temp=='\n') { count2++; if(count2==count1) { goto A; } else { printf("%c",temp); } } else { printf("%c",temp); } } A: printf("\n"); fileclose; } void fileopen(char *filename) { m=open(filename,O_RDONLY,0); if(m==-1) { printf("file open faild!\n"); } } void fileclose() { n=close(m); if(n==-1) { printf("file close faild!\n"); } }
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int m,n; void fileopen(char *filename); void fileclose(); void main(int argc,char *argv[]) { char temp; int count1,count2; count2=0; count1=atoi(argv[1]); fileopen(argv[2]); while(read(m,&temp,1)!=0) { if(temp=='\n') { count2++; } } //printf("count2=%d\n",count2); count2=count2-count1; count1=0; fileclose; fileopen(argv[2]); while(read(m,&temp,1)!=0) { if(temp=='\n') { count1++; } //printf("count1=%d\n",count1); if(count1>=count2) { printf("%c",temp); } } printf("\n"); fileclose; } void fileopen(char *filename) { m=open(filename,O_RDONLY,0); if(m==-1) { printf("file open faild!\n"); } } void fileclose() { n=close(m); if(n==-1) { printf("file close faild!\n"); } }
head
和tail
有兩個參數,一個是數字(行數)一個是字符串(地址),可是main(int argc,char *argv[])
傳參都是字符串#include <stdlib.h>
中的count1=atoi(argv[1]);
函數把字符串轉成數字- [201552222](http://www.cnblogs.com/20155222lzj/))
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 10/10 | 1/1 | 6/12 | |
第三週 | 220/230 | 2/3 | 6/18 | |
第四周 | 270/500 | 1/4 | 6/24 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。git
參考:軟件工程軟件的估計爲何這麼難,軟件工程 估計方法ubuntu
計劃學習時間:6小時api
實際學習時間:6小時數組
(有空多看看現代軟件工程 課件 軟件工程師能力自我評價表)安全