国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

嵌入式Linux系統(tǒng)編程常見問題解答(一)

發(fā)布時間:2013-11-26 11:22    發(fā)布者:edu118gct
關鍵詞: 編程

1:使用用基于文件指針的文件操作函數,實現把文本文件a.txt中的內容復制到b.txt中,b.txt中原來的內容被覆蓋。
答案:
#include
int main()
{
    FILE *fpa = fopen("a.txt", "rb");
    FILE *fpb = fopen("b.txt", "wb");
    char ch;
    while((ch = fgetc(fpa)) != EOF)
    {
        fputc(ch, fpb);
    }
    fclose(fpa);
    fclose(fpb);
    return 0;
}

2:用基于文件描述符的文件操作函數,實現自己的簡單的cp命令:mycp, 命令格式如:./mycp a.txt b.txt,把a.txt復制為b.txt。 要能實現單個文件的復制,以及從指定路徑復制文件到指定路徑中。
答案:
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
    char buf[512] = {0};
    int fo1 = open(argv[1], O_RDONLY);
    int fo2 = open(argv[2], O_WRONLY | O_CREAT | O_EXCL, 0755);
    if(fo2 == -1)
    {
        printf("error! file exist!\n");
        exit(0);
    }
    int fr = 0;
    /*開始復制*/
    while( (fr = read(fo1, buf, sizeof(buf))) > 0 )
    {
        write(fo2, buf, fr);
    }
    close(fo1);
    close(fo2);
    return 0;
}

3:從命令行傳入某個.c或.txt文件的文件名,實現以下功能。
1):對該文件的每個字符做如下變換:如果是大寫字母就變?yōu)樾懀绻切懽帜妇妥優(yōu)榇髮,并寫回原文件,其它字符不變?br /> 2):輸出該文件的大小,文件類型,鏈接數,最后修改時間。
3):測試當前用戶對該文件的權限(讀、寫、執(zhí)行)。
要求:模塊化編程,用函數實現不同的功能模塊,再通過函數指針調用相關函數。
主函數只做:打開文件,調用函數,關閉文件。
另外,對文件讀寫之前,要加鎖,讀寫完畢后,再解鎖。
答案:
/*源代碼*/
#include
#include
#include
#include
#include
#include
#include
#include
/*大小寫互相轉換*/
void zhuanhuan(int fd)
{
        char c;
        struct flock lock = {F_WRLCK, SEEK_SET, 0, 0, getpid()};

        if(-1 == fcntl(fd, F_SETLK, &lock))
        {
                perror("lock failed!\n");
                exit(-1);
        }
        while((read(fd, &c, sizeof(char)) > 0))
        {
                if(c >= 'A'&& c <= 'Z')
                        c = c + 'a' - 'A';
                else if(c >= 'a' && c <= 'z')
                        c = c - 32;
                else
                        continue;
                lseek(fd, -1, SEEK_CUR);
                write(fd, &c, sizeof(char));
        }
        lock.l_type = F_UNLCK;
        if(-1 == fcntl(fd, F_SETLK, &lock))
        {
                perror("unlock failed!\n");
                exit(-1);
        }

}
/*檢測權限*/
void quanxian(char *filename)
{
        if(!access(filename, F_OK))
        {
                if(!access(filename, R_OK))
                        printf("r");
                else
                        printf("-");
                if(!access(filename, W_OK))
                        printf("w");
                else
                        printf("-");
                if(!access(filename, X_OK))
                        printf("x");
                else
                        printf("-");
        }
        else
                printf("file not exist!\n");
}
/*獲取文件信息*/
void xinxi(int fd)
{
        struct stat a;
        if(-1 == fstat(fd, &a))
        {
                perror("fstat error");
                exit(-1);
        }

        if(S_ISREG(a.st_mode))
                printf("-");
        else if(S_ISDIR(a.st_mode))
                printf("d");
        else if(S_ISLNK(a.st_mode))
                printf("l");
        else if(S_ISCHR(a.st_mode))
                printf("c");
        else if(S_ISBLK(a.st_mode))
                printf("b");
        else if(S_ISFIFO(a.st_mode))
                printf("p");
        else if(S_ISSOCK(a.st_mode))
                printf("s");
        printf(" %d", a.st_nlink);
        printf(" %d", a.st_size);

        struct tm *pTm;
        pTm = gmtime(&a.st_mtime);
        printf(" %04d-%02d-%02d",(1900 + pTm->tm_year), (1 + pTm->tm_mon), (pTm->tm_mday));
        printf(" %02d:%02d:%02d\n",(8 + pTm->tm_hour), (pTm->tm_min), (pTm->tm_sec));
}
/*該函數調用一系列函數實現各個功能*/
void diaoyong(int fd, char *filename)
{
        /*定義函數指針*/
        void (*pfun1)(int);        
        void (*pfun2)(char *);
        void (*pfun3)(int);

        pfun1 = zhuanhuan;
        pfun2 = quanxian;
        pfun3 = xinxi;

        pfun1(fd);
        pfun2(filename);
        pfun3(fd);
}

int main(int a, char *b[])
{
        int fd = open(b[1], O_RDWR);
        if(-1 == fd)
        {
                perror("open failed!\n");
                exit(-1);
        }

        diaoyong(fd, b[1]);

        close(fd);
        return 0;
}

4:先用fork函數創(chuàng)建一個子進程,然后父進程從鍵盤輸入一個字符串,在子進程中輸出這個字符串。編寫程序過程中,注意避免造成孤兒進程和僵尸進程。要求用之前學的知識去實現。
答案:
#include
#include
#include
#include
#include
#include
int main()
{
    char buf[50] = {0};
    int pid = fork();
    if(pid > 0)
    {
        printf("父進程:Enter a string:");
        scanf("%s", buf);
        int fd = open("a.txt",O_WRONLY|O_CREAT);
        write(fd, buf, sizeof(buf));//父進程把字符串寫入文件
                close(fd);
        waitpid(pid, NULL, 0);
    }        
    else
    {
        sleep(5);
        int fd = open("a.txt",O_RDONLY);
        read(fd, buf, sizeof(buf));//子進程可以從該文件中讀出該字符串.
        close(fd);
        printf("子進程:The string is:%s\n", buf);
    }
    return 0;
}

5:寫一個顯示時間的程序,終端下動態(tài)顯示時間,并且時間在走。
答案:
#include
#include
int main()
{
        time_t n;
        struct tm *p;
        while(1)
        {
                system("clear");
                time(&n);//獲取日歷時間
                p = localtime(&n);//轉換為本地時間
                printf("%4d-%d-%d:%d:%d:%d\n", 1900+p->tm_year, 1+p->tm_mon, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
                sleep(1);
        }
        return 0;
}專業(yè)嵌入式技術實訓,咨詢郭老師QQ754634522

本文地址:http://m.qingdxww.cn/thread-123766-1-1.html     【打印本頁】

本站部分文章為轉載或網友發(fā)布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
上網去溜溜 發(fā)表于 2013-12-11 10:01:45
廣告啊!!
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節(jié)省時間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監(jiān)視
  • 貿澤電子(Mouser)專區(qū)

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 4hu影院在线观看 | 日本黄免费 | 狠狠操综合 | 久久精品无码一区二区日韩av | 日本天堂视频在线观看 | 又黄又刺激的泡妞视频 | 好男人天堂网 | 操操碰| 免费簧片视频 | 黄色成人在线 | 国产91av在线 | 99re视频 | 四虎网站入口 | 精品一区二区三区在线视频 | 九九热九九 | 99精品视频在线成人精彩视频 | 国产日韩精品欧美一区色 | 国产极品在线观看 | 二区在线观看 | 天美传媒thetmme果冻传媒 | 国产国语一级毛片在线视频 | 日本亚洲色图 | 亚洲日韩aⅴ在线视频 | 四虎hk网址 | 狠狠ady精品 | 男人天堂网站在线 | 亚天堂| 欧美日韩一级视频 | 精品欧美一区手机在线观看 | 国产精品久久99 | 香蕉视频在线看 | 日韩精品视频在线免费观看 | 国产欧美成人一区二区三区 | 天天干天天射天天操 | 手机在线观看国产精选免费 | 日本不卡在线播放 | 精品一区二区三区中文 | 野外三级国产在线观看 | 国产免费私人影院永久免费 | 欧美视频精品一区二区三区 | 免费看的黄色网址 |