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

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

發布時間:2013-11-26 11:22    發布者: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):對該文件的每個字符做如下變換:如果是大寫字母就變為小寫,如果是小寫字母就變為大寫,并寫回原文件,其它字符不變。
2):輸出該文件的大小,文件類型,鏈接數,最后修改時間。
3):測試當前用戶對該文件的權限(讀、寫、執行)。
要求:模塊化編程,用函數實現不同的功能模塊,再通過函數指針調用相關函數。
主函數只做:打開文件,調用函數,關閉文件。
另外,對文件讀寫之前,要加鎖,讀寫完畢后,再解鎖。
答案:
/*源代碼*/
#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函數創建一個子進程,然后父進程從鍵盤輸入一個字符串,在子進程中輸出這個字符串。編寫程序過程中,注意避免造成孤兒進程和僵尸進程。要求用之前學的知識去實現。
答案:
#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:寫一個顯示時間的程序,終端下動態顯示時間,并且時間在走。
答案:
#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;
}專業嵌入式技術實訓,咨詢郭老師QQ754634522

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

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

廠商推薦

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

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费一级毛片不卡在线播放 | 俄罗斯美女破苞 | 欧美影院在线观看 | 国产一级视频在线观看 | 国产精品国产高清国产专区 | 97精品在线观看 | 国内精品免费 | 91啪国自产在线高清观看 | 狠狠色丁香久久婷婷综合五月 | 91热精品 | 国内精品麻豆 | 日韩国产精品视频 | 成在线人永久免费视频下载 | 日本精品久久久一区二区三区 | 国产精品操 | 夜夜春网站| 青青青视频在线播放视频 | 真探秦先生电视剧在线 | 大香线蕉免费观看视频75 | 91制片厂果冻传媒七夕 | 四虎国产精品永久地址48 | 五月婷婷综合网 | 91免费福利视频 | 香蕉尹人在线观看免费下载 | www.av色| 亚洲精品老司机综合影院 | 日韩高清在线二区 | 久久亚洲精品国产精品婷婷 | 99视频在线观看免费视频 | 大量国产激情视频在线观看 | 亚洲图片在线 | 性刺激免费视频观看在线观看 | 成人青草亚洲国产 | 美国一区二区 | 日韩视频免费一区二区三区 | 91国内在线观看 | 欧美夜夜精品一级爽 | 看久久 | 成人三级在线观看 | 成年视频网站免费观看 | 52精品免费视频国产专区 |