0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux開發(fā)_介紹目錄編程、標準文件編程

DS小龍哥-嵌入式技術 ? 2022-09-17 15:42 ? 次閱讀

【摘要】 介紹Linux下目錄編程、標準文件編程、Linux系統文件接口編程、GDB調試等知識點。

任務1:目錄操作

學習系統編程: 主要學習系統函數的調用。

#include

/*

int argc :表示傳入的參數數量

char **argv:存放傳入的參數數據,本身是一個二維數組。

argv[0] 表示第一個參數

argv[1] 表示第二個參數

*/

int main(int argc,char **argv)

{

int i;

for(i=0;i;i++)<>

{

printf("argv[%d]=%s\n",i,argv[i]);

}

return 0;

}

文件操作函數: fopen、fclose、fread、fwrite…………

目錄操作函數:

#include

#include

DIR *opendir(const char *name); //打開目錄

struct dirent *readdir(DIR *dirp); //讀取目錄信息

int closedir(DIR *dirp); //關閉目錄

struct dirent {

ino_t d_ino; /* inode number */

off_t d_off; /* offset to the next dirent */

unsigned short d_reclen; /* length of this record */

unsigned char d_type; /* type of file; not supported by all file system types */

char d_name[256]; /* filename 文件名稱 */

};

?? (練習目錄操作)

1.?實現ls *.c 類似的功能。 產品: 視頻播放器、音樂播放器

2.?強化第一題。ls *.c

(1)?拼接路徑: /mnt/hgfs/linux-share-dir/test/test.c (通過命令行傳入路徑)

示例:./a.out ./work/test .c

結果: ./work/test/123.c ./work/test/456.c

(2)?獲取絕對路徑: /mnt/hgfs/linux-share-dir/test/test.c

示例:./a.out ./work/test .c

結果: /user/work/test/123.c /user/work/test/456.c

3.?實現目錄的拷貝。 類似cp命令

int mkdir(const char *pathname, mode_t mode);

(1)?實現一層目錄的拷貝。

(2)?實現所有目錄的拷貝。(擴展)

char *strstr(const char *haystack, const char *needle);

const char *haystack:在哪里查找

const char *needle:查找的數據

返回值: 返回查找到的數據的首地址

4.?實現cat命令效果

(1)?示例: cat 123.c

(2)?示例: cat 123.c -n (擴展作業(yè))

5.?實現du命令的功能。

(1)?示例: du 123.c 顯示出文件的大小

(2)?示例: du 123.c -h 使用合理的單位顯示出文件的大小(擴展作業(yè))

1.1 獲取當前目錄絕對地址相關函數

#include

char *getcwd(char *buf, size_t size);

char *getwd(char *buf);

char *get_current_dir_name(void); //獲取絕對路徑

int chdir(const char *path); //修改當前目錄,即切換目錄,相當于 cd 命令

1.2 mkdir函數創(chuàng)建目錄

#include

#include

int mkdir(const char *pathname, mode_t mode); // 777

#include

#include

mode_t umask(mode_t mask); //設置創(chuàng)建目錄或者文件的默認權限

一般在調用mkdir時,需要先調用umask(0);

mode_t mode參數的填寫說明:

S_IRWXU 00700 user (file owner) has read, write and exe-cute permission

S_IRUSR 00400 user has read permission

S_IWUSR 00200 user has write permission

S_IXUSR 00100 user has execute permission

S_IRWXG 00070 group has read, write and execute permis-sion

S_IRGRP 00040 group has read permission

S_IWGRP 00020 group has write permission

S_IXGRP 00010 group has execute permission

S_IRWXO 00007 others have read, write and execute per-mission

S_IROTH 00004 others have read permission

S_IWOTH 00002 others have write permission

S_IXOTH 00001 others have execute permission

1.3 獲取目錄和文件的狀態(tài)信息

#include

#include

#include

int stat(const char *path, struct stat *buf); //直接獲取源文件的狀態(tài)()

int fstat(int fd, struct stat *buf); //獲取已經打開成功的文件狀態(tài)

int lstat(const char *path, struct stat *buf); //不區(qū)分鏈接文件

//存放文件的狀態(tài)信息

struct stat {

dev_t st_dev; /* ID of device containing file */

ino_t st_ino; /* inode number */

mode_t st_mode; /* protection */

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) */

off_t st_size; /* 保存文件的大小*/

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 */

time_t st_mtime; /* time of last modification */

time_t st_ctime; /* time of last status change */

};

m的參數:-->st_mode

S_ISREG(m) 判斷是否是普通文件

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.)

任務2:帶緩沖區(qū)的文件IO操作

文件中的3個標準指針:

stderr Standard error output stream. 存放標準錯誤信息的文件

stdin Standard input stream. 存放標準輸入信息的文件

stdout Standard output stream. 存放標準輸出信息的文件

??示例:

#include

int main()

{

char buff[10];

while(1)

{

if(fread(buff,1,10,stdin)>0)

{

printf("讀出的數據=%s\n",buff);

}

}

return 0;

}

帶緩沖區(qū):這一系列函數適合操作普通文件。

size_t fread(void *restrict, size_t, size_t, FILE *restrict);

int fseek(FILE *, long, int);

size_t fwrite(const void *restrict, size_t, size_t, FILE *restrict);

int fclose(FILE *);

任務3:非緩沖區(qū)的文件IO操作

open()

#include

#include

#include

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode); //在創(chuàng)建文件的時候才調用。

ssize_t read(int fd, void *buf, size_t count);

ssize_t write(int fd, const void *buf, size_t count);

int close(int fd);

??作業(yè)

1.?練習read、write讀寫函數。

2.?將cat命令編寫使用open一系列函數實現。

3.?將stat文件狀態(tài)的時間轉為標準時間打印出來。

st_atime=1516528093

st_mtime=1516586761

st_ctime=1516586761

以上3個值是秒單位的時間。 是從1970年1月1日0時0分0秒開始計算。

格式: xxxx年xx月xx日 xx時:xx分:xx秒 星期x

轉換時間:(寫出一個類似于時鐘的程序,可以加一個鬧鐘,判斷時間是否到達)

(1)?編寫一個函數實現秒單位的時間轉為標準時間

(2)?編寫一個函數實現將標準時間轉為秒單位

#include

int main(int argc,char**argv)

{

while(1)

{

long cnt=time(NULL); //獲取當前系統時間

sleep(1); //睡眠一秒鐘

printf("cnt=%d\n",cnt);

}

return 0;

}

4.?擴展作業(yè):重寫一個scanf與printf函數。

int printf(const char *format, ...);

int scanf(const char *format, ...);

…可變形參

任務4:安裝編輯器

??壓縮與打包名稱

.1.1 解壓命令的使用格式: tar -xvf <壓縮文件的名稱>

1.1.?想要指定解壓之后文件存放的位置: tar -xvf <壓縮文件的名稱> -C <指定的目錄>

1.2 打包指定文件夾或者文件: tar -cvf <新文件的名稱> <要打包的目錄>

示例: [root@wbyq test]# tar cvf SublimeText2.tar SublimeText2

注意:壓縮包不能直接在共享目錄下解壓。

??運行軟件:

(1)?# ./sublime_text

(2)?# ./sublime_text & (后臺運行程序)

??切換中文輸入法:Ctrl+空格

??linux操作系統保存可執(zhí)行文件的環(huán)境變量: PATH

(1)?打印環(huán)境變量的值:echo $PATH

pYYBAGMlPD6Aa3ULAACW_djF3yo579.png

(2)修改環(huán)境變量:# vim /etc/profile (系統開機的時候自動執(zhí)行)

poYBAGMlPD-AMQi6AADSYnDeXQo992.png

(3) source命令立即生效環(huán)境變量。(只是針對當前的終端)

示例:# source /etc/profile

任務5: GDB調試器

使用GDB調試工具: gdb <可執(zhí)行文件的名稱>

示例: gdb a.out

要支持調試程序,需要在gcc編譯的時候加上-g選項參數。

示例:gcc -g 123.c

??常用的命令:

breakpoints -- 設置程序的斷點(簡寫b)。 語法: b <行號>或者 b <函數名稱>

running -- 開始運行程序(簡寫run)

list -- 打印出當前的代碼

next -- 單步調試

quit -- 退出調試界面


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11123

    瀏覽量

    207908
  • 編程
    +關注

    關注

    88

    文章

    3521

    瀏覽量

    93268
  • GDB調試
    +關注

    關注

    0

    文章

    24

    瀏覽量

    1423
收藏 人收藏

    評論

    相關推薦

    Linux 驅動開發(fā)與應用開發(fā),你知道多少?

    一、Linux驅動開發(fā)與應用開發(fā)的區(qū)別開發(fā)層次不同:Linux驅動開發(fā)主要是針對硬件設備進行
    的頭像 發(fā)表于 08-30 12:16 ?160次閱讀
    <b class='flag-5'>Linux</b> 驅動<b class='flag-5'>開發(fā)</b>與應用<b class='flag-5'>開發(fā)</b>,你知道多少?

    fpga開發(fā)需要掌握哪些編程語言

    FPGA(現場可編程門陣列)開發(fā)涉及多種編程語言和技術.
    的頭像 發(fā)表于 03-27 14:34 ?1117次閱讀

    linux的常用命令

    的發(fā)行版 在Linux的內核改進:CentOSE,Redhat,Suse,Ubuntu,紅旗Linux Part2 Linux文件系統目錄
    的頭像 發(fā)表于 11-24 16:04 ?486次閱讀
    <b class='flag-5'>linux</b>的常用命令

    i.MX6ULL——ElfBoard ELF1板卡 之文件系統目錄介紹

    文件系統通常提供目錄文件夾用于記錄文件,在很多系統中目錄本身也是文件,在這些系統中,
    發(fā)表于 11-24 09:59

    Linux目錄權限給指定用戶

    Linux是一個開放源代碼的操作系統,它基于Unix的設計原則,提供了豐富的權限管理功能,允許用戶對系統中的文件目錄進行精確的控制。在Linux中,每個
    的頭像 發(fā)表于 11-23 10:30 ?7156次閱讀

    linux文件訪問權限怎么設置

    Linux 文件訪問權限是操作系統中一個非常重要的概念。正確地設置文件訪問權限可以保護系統的安全性,防止未經授權的人員對文件進行修改、刪除或執(zhí)行。本文將詳細
    的頭像 發(fā)表于 11-23 10:20 ?1259次閱讀

    vm虛擬機linux系統怎么編程

    不同的操作系統之間切換,并在Linux系統中進行編程開發(fā)。 以下是使用虛擬機在Linux系統中進行編程的詳細步驟: 1.安裝虛擬機軟件:
    的頭像 發(fā)表于 11-17 10:10 ?1480次閱讀

    linux刪除文件命令rm

    Linux系統中,可以使用rm命令來刪除文件目錄。該命令的功能是刪除一個目錄中的一個或多個文件目錄
    的頭像 發(fā)表于 11-13 16:42 ?694次閱讀

    Socket 網絡編程框架介紹

    一套面向 Socket 的網絡編程框架,并通過提供一組標準的 System call APIs,使得開發(fā)者可以在 Userspace 中便捷的開發(fā)各種 Network Applicat
    的頭像 發(fā)表于 11-09 14:19 ?855次閱讀
    Socket 網絡<b class='flag-5'>編程</b>框架<b class='flag-5'>介紹</b>

    linux命令行與shell編程實戰(zhàn)

    Linux命令行與Shell編程實戰(zhàn)主要涉及以下內容: Linux命令行基礎:學習Linux命令行的基本操作,如文件管理、進程管理、網絡配置
    的頭像 發(fā)表于 11-08 10:57 ?622次閱讀

    linux命令和shell編程有什么聯系

    的命令,并提供了許多功能和特性,如變量、控制結構、函數等,這些功能和特性使得Shell編程成為可能。 其次,Linux命令是Shell編程的重要組成部分。通過使用Linux命令,用戶可
    的頭像 發(fā)表于 11-08 10:53 ?771次閱讀

    shell編程常用命令

    在Shell編程中,常用命令包括以下幾種: ls :列出目錄中的文件和子目錄。 cp :復制文件目錄
    的頭像 發(fā)表于 11-08 10:43 ?821次閱讀

    shell編程實例詳解

    文件備份腳本。 #!/bin/bash # 定義備份目錄文件名 backup_dir= "/path/to/backup/directory" backup_file= "backup_
    的頭像 發(fā)表于 11-08 10:40 ?407次閱讀

    Linux指令與Shell編程范例的速查手冊

    Linux是目前最熱門的操作系統之一,廣泛地應用在各大領域,作為服務器、測試環(huán)境、手機和平板電腦的開發(fā)平臺等。 盡管目前的Linux用 戶界面已經十分友善,但在實際應用中還是以命令搭配簡單的
    發(fā)表于 09-22 08:01

    Linux下C語言編程入門教程

    u3000本文是Linux 下C 語言編程入門教程。主要介紹Linux 的發(fā)展與特點、C語言的基礎知識、Linux 程序設計基礎知識及其下
    發(fā)表于 09-22 06:56