Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: mã nguồn chương trình which trên Linux

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    81

    Mặc định mã nguồn chương trình which trên Linux

    mình mới viết được chương trình which của bên linux gửi lên cho các bạn tham khảo
    C Code:
    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <stdlib.h>
    4. #include <unistd.h>
    5. char **str2array(const char *word,char sep){
    6.   if(word==NULL) return NULL;
    7.   while(*word==sep) word++;
    8.   char *path=word;
    9.   size_t len=strlen(path);
    10.   size_t frag=0,r=0,count=0,msize;
    11.   char **vpath;
    12.   /*first count how many*/
    13.   while(*path)  if(*path++==sep) frag++;
    14.   vpath=(char **)malloc( (frag+2)*sizeof(char*)+len+1 );
    15.   path=word;
    16.   vpath[r]=vpath+frag+2;
    17.   while(*path){
    18.         *(vpath[r]+count++)=*path++;
    19.         if(*path==sep) {
    20.           *(vpath[r]+count)=NULL;
    21.           vpath[r+1]=vpath[r]+count+1;
    22.           count=0,path++,r++;
    23.         }
    24.   }
    25.   vpath[r+1]=NULL;
    26.   return vpath;
    27. }
    28. char *which(const char *word){
    29.   char **vpath=str2array(getenv("PATH"),':');
    30.   char buf[266],*rpt=0;
    31.   size_t r=0;
    32.   while(vpath[r]){
    33.         strcpy(buf,vpath[r]);strcat(buf,"/");
    34.         strcat(buf,word);
    35.         if(access(buf,F_OK)==0) {
    36.           rpt=(char *)malloc(strlen(buf));
    37.           if(rpt)  strcpy(rpt,buf);
    38.           return rpt;
    39.         }
    40.         r++;
    41.   }
    42.   free((void *)vpath);
    43.   return NULL;
    44. }
    45.  
    46. int main(int argc,char **argv){
    47.         if(argc<2) exit(1);
    48.         char * where = which(argv[1]);
    49.         if(where)
    50.         printf("%s\n",where);
    51.         else exit(1);
    52. }
    biên dịch:
    gcc -o which which.c
    live free or die
    phamthechung0@gmail.com

  2. #2
    Ngày gia nhập
    09 2008
    Bài viết
    57

    Bạn giải thích giúp mình về kĩ thuật bạn sử dụng được không, mình đọc code nhưng không hiểu lắm.
    Một số hàm mình click vào không thấy help của nó nữa.
    Cám ơn bạn trước.
    Ghi rõ license hoặc 0 điểm

  3. #3
    Ngày gia nhập
    04 2011
    Bài viết
    81

    chuơng trình which chạy từ command, không có giao diện đồ họa
    live free or die
    phamthechung0@gmail.com

  4. #4
    Ngày gia nhập
    09 2008
    Bài viết
    57

    Vậy hàm access ở đây có tác dụng gì hả bạn, mình không thấy manual của nó. Giải thích giùm mình với. Cám ơn bạn.
    Ghi rõ license hoặc 0 điểm

  5. #5
    Ngày gia nhập
    04 2011
    Bài viết
    81

    hàm access là hàm syscall có tác dụng kiểm tra file đó có tồn tại hay không
    live free or die
    phamthechung0@gmail.com

Các đề tài tương tự

  1. Lập trình C Thư viện getopt và vấn đề dịch mã nguồn C- Linux trên Windows
    Gửi bởi anhtuanbkitpro trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 1
    Bài viết cuối: 02-04-2013, 10:09 PM
  2. Giảm 50% học phí khóa Mã nguồn mở (Linux, Php, Mysql, Apache,…)
    Gửi bởi dnictdanang1 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 27-09-2012, 09:53 AM
  3. Muốn học về Linux để phát triển theo hướng mã nguồn mở trên Linux thì phải làm những gì?
    Gửi bởi vncoder trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 7
    Bài viết cuối: 06-01-2012, 07:58 AM
  4. Linux, LPI, học Linux mã nguồn mở
    Gửi bởi peheokuekv trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 28-05-2011, 09:38 AM
  5. Lập trình C mã nguồn trong linux ở thư mục nào
    Gửi bởi nmt1402 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 1
    Bài viết cuối: 25-12-2010, 12:15 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn