課程概覽
===============
? ? 1.學(xué)習(xí)方法:學(xué)接口函數(shù)(返回值,功能蔑祟,形參)
? ? 2.系統(tǒng)IO相關(guān)的函數(shù)
? ? ? 標(biāo)準(zhǔn)IO相關(guān)的函數(shù)
? ? ? 目錄操作相關(guān)的函數(shù)
系統(tǒng)IO函數(shù)
==============
? ? IO:input? output文件的輸入和輸出
? ? ? ? ? 嵌入式中有大量的硬件設(shè)備(液晶屏实檀,觸摸屏婚夫,鍵盤)
? ? ? ? ? linux中一切都是文件: /dev
? ? ? ? ? open()? read()? write? close? lseek? stat? ? dup? dup2
? ? (1)文件的打開或者新建
? ? ? #include <sys/types.h>
? ? ? #include <sys/stat.h>
? ? ? #include <fcntl.h>
? ? ? ? ? int open(const char *pathname, int flags);
? ? ? ? ? ? ? ? 返回值:成功返回文件描述符或者翻譯成文件的句柄(重點(diǎn),替身)
? ? ? ? ? ? ? ? ? ? ? ? 專業(yè)理解:文件描述符就是數(shù)組的下標(biāo)(系統(tǒng)中定義一個(gè)專門存放打開文件屬性信息的結(jié)構(gòu)體數(shù)組)
? ? ? ? ? ? ? ? ? ? ? ? 非專業(yè)理解:文件描述符就是替身
? ? ? ? ? ? ? ? ? ? ? ? 失敗? -1
? ? ? ? ? ? ? ? ? 參數(shù):pathname --》你要打開激才、新建的文件的路徑名
? ? ? ? ? ? ? ? ? ? ? ? flags --》O_RDONLY,? O_WRONLY,? or? O_RDWR.? 宏定義
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用什么權(quán)限打開文件
? ? ? ? ? ? ? int fd=open("/home/gec/1.txt",O_RDWR);
? ? ? ? ? int open(const char *pathname, int flags, mode_t mode); //新建文件的同時(shí)可以設(shè)置文件的權(quán)限
? ? ? ? ? ? ? ? ? 參數(shù):mode --》設(shè)置權(quán)限的鳍贾,用八進(jìn)制的數(shù)字表示權(quán)限
? ? ? ? ? ? ? ? ? ? ? ? flags --》O_CREAT 新建文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? O_EXCL? 配合O_CREAT一起使用梦抢,表示如果新建的文件已經(jīng)存在就返回-1并退出
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? O_TRUNC 配合O_CREAT一起使用般贼,表示如果新建的文件已經(jīng)存在就清空覆蓋掉原來的文件
? ? ? ? ? ? ? ? ? ? ? ? open("/home/gec/new.txt",O_CREAT,0777);
? ? ? ? ? 總結(jié):linux中只要函數(shù)參數(shù)有多個(gè)宏定義讓你選擇
? ? ? ? ? ? ? ? 你如果要使用多個(gè)宏,都是用按位或連接起來
系統(tǒng)IO
=================
? ? ? ? 在共享里面用chmod修改權(quán)限是不準(zhǔn)確的(windows跟linux公用的環(huán)境奥吩,修改權(quán)限哼蛆,創(chuàng)建軟鏈接都會(huì)有問題)
? ? ? ? rwxrwxrwx 1 root root? 33 Jan 13 22:08 1.txt
? ? ? ? touch命令:
? ? ? ? ? ? ? 新建文件,但是無法打開文件? ? ? ? ? ? ?
? ? ? ? /usr/src/linux-headers-3.5.0-23-generic/include/linux/sched.h的第1394行定義結(jié)構(gòu)體指針霞赫,專門用來指向打開成功的文件信息(結(jié)構(gòu)體數(shù)組)
? ? ? (2)讀取文件內(nèi)容
? ? ? ? ? ? ? ? fd=open("1.txt")? 文件描述符和文件名本身之間一一對(duì)應(yīng)的映射關(guān)系
? ? ? ? ? ? ? ? typedef 給常見的類型換了新名字腮介,例如mode_t? size_t? ssize_t? off_t
? ? ? ? ? ? ? ? #include <unistd.h>
? ? ? ? ? ? ? ? ssize_t read(int fd, void *buf, size_t count);
? ? ? ? ? ? ? ? ? ? ? 返回值:成功讀取的字節(jié)數(shù)? 失敗? -1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文件讀取完畢返回0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fd --》文件或者硬件設(shè)備的文件描述符
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buf --》可以接收任意類型指針作為實(shí)參,存放你讀取到的文件內(nèi)容
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? count --》你打算讀取多少字節(jié)的數(shù)據(jù)
? ? ? (3)寫入文件
? ? ? ? ? ? ? ? #include <unistd.h>
? ? ? ? ? ? ? ? ssize_t write(int fd, const void *buf, size_t count);
? ? ? ? ? ? ? ? ? ? ? 返回值:count寫多少端衰,返回值就是多少? 失敗? -1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 注意問題:count不要隨便亂寫
? ? ? (4)文件的關(guān)閉
? ? ? ? ? ? ? int close(int fd);
? ? ? (5)設(shè)置文件讀寫偏移(設(shè)置光標(biāo)位置)
? ? ? ? ? ? ? off_t lseek(int fildes, off_t offset, int whence);
? ? ? ? ? ? ? ? ? ? ? 返回值:當(dāng)前光標(biāo)距離文件開頭的字節(jié)數(shù)? ? 失敗? -1
? ? ? ? ? ? ? ? ? ? ? ? 參數(shù):fildes --》你要設(shè)置偏移的文件的文件描述符
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? offset --》你打算偏移多少字節(jié)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? whence --》SEEK_SET -->起始位置
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SEEK_CUR -->當(dāng)前位置
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SEEK_END -->文件末尾
? ? ? ? ? ? ? ? ? ? ? ? 例如:lseek(fd,0,SEEK_END); 返回值就是文件的大小叠洗,記得求出大小以后,重新將光標(biāo)移動(dòng)回起始位置
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lseek(fd,-5,SEEK_END);? ? ? ? ?
練習(xí):
? ? 1.拷貝文件 -->通過主函數(shù)傳參拷貝一個(gè)文件
? ? ? ? ? ./main? 1.txt? 2.txt?
? ? ? ? ? ? ? 1.txt本來就有(字節(jié)數(shù)要求多一點(diǎn)旅东,例如拷貝我們的某一天的筆記)
? ? ? ? ? ? ? 2.txt沒有
? ? 2.open("1.txt") ,打印文件描述符
? ? ? open("2.txt") ,打印文件描述符
? ? ? 關(guān)閉1.txt
? ? ? open("3.txt") ,打印文件描述符
? ? 3. lseek(fd,-5,SEEK_SET);
? ? ? lseek(fd,-5,SEEK_CUR);
? ? 4. 要求將文件最后面十個(gè)字節(jié)的內(nèi)容惕味,以及倒數(shù)第50到60這十個(gè)字節(jié)的數(shù)據(jù)拷貝到另外一個(gè)文件中
? ? ? ? ? ? ./main? 1.txt
? ? 5. 在開發(fā)板上顯示bmp格式的圖片
? ? ? ? bmp格式圖片特點(diǎn):
? ? ? ? ? ? ? ? 1.每個(gè)像素點(diǎn)占3個(gè)字節(jié)
? ? ? ? ? ? ? ? 2.bmp格式是微軟公司發(fā)明的,存儲(chǔ)的時(shí)候顏色值顛倒BGR
? ? ? ? ? ? ? ? 3.存儲(chǔ)的時(shí)候上下也是顛倒的
? ? ? ? 機(jī)器視覺 -->圖像處理 opencv? openGL
系統(tǒng)IO
=================
? ? ? vim新建文件玉锌,會(huì)有隱藏字符,你可以在/etc/vim/vimrc配置文件中名挥,加上set list這句話,顯示隱藏的字符
? ? ? (6)獲取文件屬性信息(比如:文件的權(quán)限主守,文件的大匈骶蟆)
? ? ? #include <sys/types.h>
? ? ? #include <sys/stat.h>
? ? ? #include <unistd.h>
? ? ? int stat(const char *path, struct stat *buf);? //不能夠判斷軟鏈接
? ? ? int lstat(const char *path, struct stat *buf);? //能夠判斷軟鏈接
? ? ? ? ? ? ? ? ? 返回值:成功? 0? ? 失敗? -1
? ? ? ? ? ? ? ? ? ? 參數(shù):path --》文件的路徑名
? ? ? ? ? ? ? ? ? ? ? ? ? buf --》存放你獲取到的文件的屬性信息
? ? ? ? ? struct stat {
? ? ? ? ? ? ? dev_t? ? st_dev;? ? /* ID of device containing file */
? ? ? ? ? ? ? ino_t? ? st_ino;? ? /* inode number */? linux將目錄中所有的內(nèi)容用類似鏈表的存儲(chǔ)結(jié)構(gòu)榄融,每個(gè)節(jié)點(diǎn)都有一個(gè)編號(hào)
? ? ? ? ? ? ? mode_t? ? st_mode;? ? /* protection */? 存放文件的權(quán)限信息,文件類型信息(重點(diǎn))
? ? ? ? ? ? ? nlink_t? st_nlink;? /* number of hard links */
? ? ? ? ? ? ? uid_t? ? st_uid;? ? /* user ID of owner */
? ? ? ? ? ? ? gid_t? ? st_gid;? ? /* group ID of owner */
? ? ? ? ? ? ? dev_t? ? st_rdev;? ? /* device ID (if special file) */? 字符設(shè)備或者塊設(shè)備
? ? ? ? ? ? ? off_t? ? st_size;? ? /* total size, in bytes */? 文件大小
? ? ? ? ? ? ? blksize_t st_blksize; /* blocksize for file system I/O */
? ? ? ? ? ? ? blkcnt_t? st_blocks;? /* number of 512B blocks allocated */
? ? ? ? ? ? ? time_t? ? st_atime;? /* time of last access */? ? 最后訪問時(shí)間
? ? ? ? ? ? ? time_t? ? st_mtime;? /* time of last modification */? 修改時(shí)間
? ? ? ? ? ? ? time_t? ? st_ctime;? /* time of last status change */ 狀態(tài)改變時(shí)間
? ? ? ? ? };
? ? ? ? ? S_IRWXU? ? 00700? ? mask for file owner permissions
? ? ? ? ? S_IRUSR? ? 00400? ? owner has read permission
? ? ? ? ? S_IWUSR? ? 00200? ? owner has write permission
? ? ? ? ? S_IXUSR? ? 00100? ? owner has execute permission
? ? ? ? ? S_IRWXG? ? 00070? ? mask for group permissions
? ? ? ? ? S_IRGRP? ? 00040? ? group has read permission
? ? ? ? ? S_IWGRP? ? 00020? ? group has write permission
? ? ? ? ? S_IXGRP? ? 00010? ? group has execute permission
? ? ? ? ? S_IRWXO? ? 00007? ? mask for permissions for others (not in group)
? ? ? ? ? S_IROTH? ? 00004? ? others have read permission
? ? ? ? ? S_IWOTH? ? 00002? ? others have write permission
? ? ? ? ? S_IXOTH? ? 00001? ? others have execute permission
? ? ? ? ? S_ISREG(m)? is it a regular file?
? ? ? ? ? S_ISDIR(m)? directory?
? ? ? ? ? S_ISCHR(m)? character device?
? ? ? ? ? S_ISBLK(m)? block device?
? ? ? ? ? S_ISFIFO(m) FIFO (named pipe)?
? ? ? ? ? S_ISLNK(m)? symbolic link? (Not in POSIX.1-1996.)
? ? ? ? ? S_ISSOCK(m) socket? (Not in POSIX.1-1996.)
? ? ? (7)文件重定向
? ? ? ? ? ? 標(biāo)準(zhǔn)輸出:lcd? printf打印的內(nèi)容
? ? ? ? ? ? 標(biāo)準(zhǔn)錯(cuò)誤輸出:lcd? perror打印
? ? ? ? ? ? int dup(int fildes); //給舊的文件描述符,分配新的文件描述符
? ? ? ? ? ? ? ? ? 返回值:新的文件描述符? 失敗? -1
? ? ? ? ? ? ? ? ? ? 參數(shù):fildes --》原本舊的的文件描述符
? ? ? ? ? ? int dup2(int fildes, int fildes2);
? ? ? (8)錯(cuò)誤碼
? ? ? ? ? ? 原理:linux中定義一個(gè)全局變量errno,保存了linux系統(tǒng)中所有常見的錯(cuò)誤類型
? ? ? ? ? ? ? ? ? linux頭文件中將所有的出錯(cuò)定義成了宏救湖,errno保存某個(gè)出錯(cuò)的宏定義
? ? ? ? ? ? ? ? /usr/include/asm-generic/errno.h定義了一部分錯(cuò)誤的宏
? ? ? ? ? ? #include <stdio.h>
? ? ? ? ? ? #include <errno.h>
? ? ? ? ? ? ? void perror(const char *s); //將錯(cuò)誤的原因也打印出來
? ? ? ? ? ? ? ? ? ? ? 參數(shù):s --》打印信息
? ? ? (9)修改權(quán)限
? ? ? ? ? ? int chmod(const char *path, mode_t mode);
練習(xí):
? ? ? 主函數(shù)傳參傳遞路徑
? ? ? ? ? ? 檢查參數(shù)個(gè)數(shù) --》不符合要求退出愧杯,讓用戶傳參
? ? ? ? ? ? 檢查文件類型 --》普通文件,要求獲取文件大小鞋既,并判斷文件的權(quán)限是不是當(dāng)前用戶可讀可寫
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果權(quán)限不符合要求使用chmod()函數(shù)修改權(quán)限為可讀可寫,然后拷貝
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 目錄力九,退出程序,提示用戶邑闺,文件類型不符合要求
標(biāo)準(zhǔn)IO
=================
? ? ? 標(biāo)準(zhǔn)IO和系統(tǒng)IO
? ? ? ? ? ? 主要區(qū)別:系統(tǒng)IO open? read? write? close? 不帶讀寫緩沖
? ? ? ? ? ? ? ? ? ? ? 標(biāo)準(zhǔn)IO fopen? fread? fwrite? fclose? 帶緩沖
? ? ? (1)打開文件
? ? ? ? ? ? FILE *fopen(const char *path, const char *mode);
? ? ? ? ? ? ? ? ? 返回值:成功返回FILE類型的指針用來存放文件的信息
? ? ? ? ? ? ? ? ? ? ? ? ? 失敗? NULL
? ? ? ? ? ? ? ? ? ? 參數(shù):mode --》r? 只讀的方式打開
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? r+? 可讀可寫的方式打開
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? w? 如果文件不存在跌前,可以新建
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果文件存在,清空? 可寫的方式打開
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? w+? 如果文件不存在陡舅,可以新建
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果文件存在抵乓,清空? 可讀可寫的方式打開
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a? 追加的方式打開文件,不存在靶衍,新建
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a+? 追加的方式打開文件灾炭,不存在,新建
? ? ? (2)文件的讀寫
? ? ? ? ? ? ssize_t read(int fd, void *buf, size_t count);
? ? ? ? ? ? ? ? ? read(fd,buf,100);
? ? ? ? ? ? ? ? ? fread(buf,10,10,myfile);
? ? ? ? ? ? ? ? ? fread(buf,25,4,myfile);
? ? ? ? ? ? ? ? ? fread(buf,100,1,myfile);
? ? ? ? ? ? size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
? ? ? ? ? ? ? ? ? ? ? 以數(shù)據(jù)塊為單位讀
? ? ? ? ? ? ? ? ? ? ? 返回值:重點(diǎn) 成功讀取到的完整的數(shù)據(jù)塊的個(gè)數(shù)?
? ? ? ? ? ? ? ? ? ? ? ? 參數(shù):size --》每個(gè)數(shù)據(jù)塊的大小? 字節(jié)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? nmemb --》你打算讀取多少個(gè)數(shù)據(jù)塊
? ? ? ? ? ? size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
? ? ? ? ? ? ? ? ? ? ? 返回值:重點(diǎn) 在沒有超出緩沖區(qū)大小的情況下 nmemb寫多少颅眶,返回值就是多少
標(biāo)準(zhǔn)IO
================
? ? ? 硬件的驅(qū)動(dòng):用系統(tǒng)IO操作
? ? ? 讀寫一個(gè)普通文件:建議你用標(biāo)準(zhǔn)IO蜈出,帶緩沖速度快
? ? ? (4)關(guān)閉
? ? ? ? ? ? int fclose(FILE *fp);
? ? ? (5)字符串的拼接和拆分
? ? ? ? ? ? sprintf() //字符串的拼接,可以將任意類型的數(shù)據(jù)拼接成字符串(*****重點(diǎn))
? ? ? ? ? ? ? ? int sprintf(char *str, const char *format, ...); //可變參數(shù)函數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? 參數(shù):str --》存放拼接得到的字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? format --》你想按照什么格式去拼接字符串
? ? ? ? ? ? ? ? ? ? ? ? ? 注意:str大小一定要足夠存放結(jié)果
? ? ? ? ? ? sscanf() //字符串拆分
? ? ? ? ? ? ? ? int sscanf(const char *str, const char *format, ...);
? ? ? ? ? ? ? ? ? ? ? ? ? 參數(shù):str --》你要拆分的字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? format --》你打算按照什么格式拆分
? ? ? (6)刷新緩沖區(qū),區(qū)分系統(tǒng)IO(不帶緩沖區(qū))和標(biāo)準(zhǔn)IO(f開頭的那些函數(shù)涛酗,帶緩沖區(qū))
? ? ? ? ? ? int fflush(FILE *stream);
? ? ? (7)求緩沖區(qū)大小
? ? ? ? ? ? 系統(tǒng)中/usr/include/stdio.h? 第49行類型重定義了FILE
? ? ? ? ? ? ? ? ? /usr/include/libio.h? 第273行就有結(jié)構(gòu)體的完整定義
? ? ? ? ? ? linux中將緩沖分為三種:不帶緩沖铡原,全緩沖,行緩沖
? ? ? ? ? ? ? ? ? 全緩沖:等待緩沖去填滿煤杀,才進(jìn)行IO操作眷蜈,普通文件
? ? ? ? ? ? ? ? ? ? A 當(dāng)緩沖區(qū)被填滿時(shí)沪哺,立即刷新
? ? ? ? ? ? ? ? ? ? B 當(dāng)調(diào)用fflush( )時(shí)沈自,立即刷新
? ? ? ? ? ? ? ? ? ? C 當(dāng)調(diào)用setbuf( )/setvbuf( )時(shí),立即刷新
? ? ? ? ? ? ? ? ? ? D 當(dāng)進(jìn)程正常關(guān)閉時(shí)辜妓,立即刷新(暫時(shí)不管)
? ? ? ? ? ? ? ? ? ? ? D.1 在main函數(shù)中return
? ? ? ? ? ? ? ? ? ? ? D.2 調(diào)用exit( )/_exit( )/_Exit( )
? ? ? ? ? ? ? ? ? ? ? D.3 在最后一條線程中調(diào)用pthread_exit( )
? ? ? ? ? ? ? ? ? ? E 當(dāng)調(diào)用fclose( )時(shí)枯途,立即刷新
? ? ? ? ? ? ? ? ? 行緩沖:等待一行結(jié)束 \n,進(jìn)行IO操作籍滴,或者行緩沖區(qū)滿了酪夷,刷新,標(biāo)準(zhǔn)輸出(屏幕)孽惰,標(biāo)準(zhǔn)IO
? ? ? ? ? ? ? ? ? ? A 當(dāng)緩沖區(qū)被填滿時(shí)晚岭,立即刷新
? ? ? ? ? ? ? ? ? ? B 當(dāng)調(diào)用fflush( )時(shí),立即刷新
? ? ? ? ? ? ? ? ? ? C 當(dāng)調(diào)用setbuf( )/setvbuf( )時(shí)勋功,立即刷新
? ? ? ? ? ? ? ? ? ? D 當(dāng)進(jìn)程正常關(guān)閉時(shí)坦报,立即刷新
? ? ? ? ? ? ? ? ? ? ? D.1 在main函數(shù)中return
? ? ? ? ? ? ? ? ? ? ? D.2 調(diào)用exit( )/_exit( )/_Exit( )
? ? ? ? ? ? ? ? ? ? ? D.3 在最后一條線程中調(diào)用pthread_exit( )
? ? ? ? ? ? ? ? ? ? E 當(dāng)調(diào)用fclose( )時(shí)库说,立即刷新
? ? ? ? ? ? ? ? ? ? F 當(dāng)遇到'\n'時(shí),立即刷新
? ? ? ? ? (8)設(shè)置文件讀寫的偏移
? ? ? ? ? ? ? int fseek(FILE *stream, long offset, int whence);
? ? ? ? ? ? ? long ftell(FILE *stream); //返回文件當(dāng)前位置距離文件開頭的字節(jié)數(shù)
? ? ? ? ? ? ? void rewind(FILE *stream); //等價(jià)于fseek(filep,0,SEEK_SET);
? ? ? ? ? ? ? ? ? ? C語言:long整型 long m=12;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? long m=12L;
? ? ? ? ? (9)fgets()? fputs()? gets()? puts()? getchar()? putchar() getc()? putc()
? ? ? ? ? ? ? ? 第一組:fgets()? fputs()
? ? ? ? ? ? ? ? ? ? 總結(jié):fgets(buf,size,filep);
? ? ? ? ? ? ? ? ? ? ? ? ? ? size沒有超出文件一行的大小片择,buf中最后面填充'\0'
? ? ? ? ? ? ? ? ? ? ? ? ? ? size超過了文件一行的大小潜的,buf中最后面將回車(windows上\r\n)以及'\0'補(bǔ)充在后面
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (linux上\n)
? ? ? ? ? ? ? ? ? ? char *fgets(char *s, int size, FILE *stream);? //讀取一行數(shù)據(jù)? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回值:讀取到字符串的首地址? 失敗? NULL
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 參數(shù):s --》存放讀取到的字符串
? ? ? ? ? ? ? ? ? ? int fputs(const char *s, FILE *stream); //寫入一行數(shù)據(jù)
? ? ? ? ? ? ? 第二組:gets()? puts()
? ? ? ? ? ? ? ? ? ? char *gets(char *s); //只能從鍵盤讀取字符串
? ? ? ? ? ? ? ? ? ? int puts(const char *s); //只能寫入到標(biāo)準(zhǔn)輸出(液晶屏)
? ? ? ? ? ? ? 第三組:getchar()? putchar()
? ? ? ? ? ? ? ? ? ? int getchar(void);
? ? ? ? ? ? ? ? ? ? int putchar(int c); //只能是寫入一個(gè)字符到lcd
? ? ? ? ? ? ? ? ? ? ? ? ? 返回值:對(duì)應(yīng)字符的ASCII值
? ? ? ? ? ? ? ? ? ? ? ? ? ? 參數(shù):c --》你要寫入的字符的ASCII值
? ? ? ? ? ? ? 第四組:getc()? putc()
? ? ? ? ? ? ? ? ? ? int getc(FILE *stream);
? ? ? ? ? ? ? ? ? ? ? ? getc(stdin); 從鍵盤讀取一個(gè)字符,返回字符的ASCII碼值
? ? ? ? ? ? ? ? ? ? ? ? getc(filep); 從filep代表的文件中讀取一個(gè)字符
? ? ? ? ? ? ? ? ? ? int putc(int c, FILE *stream);
? ? ? ? ? ? ? ? ? ? ? ? putc('y',stdout); //將y打印在屏幕上
? ? ? ? ? ? ? ? ? ? ? ? putc('y',filep); //將字符y寫入到filep代表的文件中