一江春水向東流

          做一個(gè)有思想的人,期待與每一位熱愛(ài)思考的人交流,您的關(guān)注是對(duì)我最大的支持。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            44 隨筆 :: 139 文章 :: 81 評(píng)論 :: 0 Trackbacks

          alarm(設(shè)置信號(hào)傳送鬧鐘)??
          相關(guān)函數(shù)?? signal,sleep

          表頭文件?? #include<unistd.h>

          定義函數(shù)?? unsigned int alarm(unsigned int seconds);

          函數(shù)說(shuō)明?? alarm()用來(lái)設(shè)置信號(hào)SIGALRM在經(jīng)過(guò)參數(shù)seconds指定的秒數(shù)后傳送給目前的進(jìn)程。如果參數(shù)seconds 為0,則之前設(shè)置的鬧鐘會(huì)被取消,并將剩下的時(shí)間返回。

          返回值?? 返回之前鬧鐘的剩余秒數(shù),如果之前未設(shè)鬧鐘則返回0。

          范例?? #include<unistd.h>
          #include<signal.h>
          void handler() {
          printf(“hello\n”);
          }
          main()
          {
          int i;
          signal(SIGALRM,handler);
          alarm(5);
          for(i=1;i<7;i++){
          printf(“sleep %d ...\n”,i);
          sleep(1);
          }
          }

          執(zhí)行?? sleep 1 ...
          sleep 2 ...
          sleep 3 ...
          sleep 4 ...
          sleep 5 ...
          hello
          sleep 6 ...

           


          kill(傳送信號(hào)給指定的進(jìn)程)??
          相關(guān)函數(shù)?? raise,signal

          表頭文件?? #include<sys/types.h>
          #include<signal.h>

          定義函數(shù)?? int kill(pid_t pid,int sig);

          函數(shù)說(shuō)明?? kill()可以用來(lái)送參數(shù)sig指定的信號(hào)給參數(shù)pid指定的進(jìn)程。參數(shù)pid有幾種情況:
          pid>0 將信號(hào)傳給進(jìn)程識(shí)別碼為pid 的進(jìn)程。
          pid=0 將信號(hào)傳給和目前進(jìn)程相同進(jìn)程組的所有進(jìn)程
          pid=-1 將信號(hào)廣播傳送給系統(tǒng)內(nèi)所有的進(jìn)程
          pid<0 將信號(hào)傳給進(jìn)程組識(shí)別碼為pid絕對(duì)值的所有進(jìn)程
          參數(shù)sig代表的信號(hào)編號(hào)可參考附錄D

          返回值?? 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。

          錯(cuò)誤代碼?? EINVAL 參數(shù)sig 不合法
          ESRCH 參數(shù)pid 所指定的進(jìn)程或進(jìn)程組不存在
          EPERM 權(quán)限不夠無(wú)法傳送信號(hào)給指定進(jìn)程

          范例?? #include<unistd.h>
          #include<signal.h>
          #include<sys/types.h>
          #include<sys/wait.h>
          main()
          {
          pid_t pid;
          int status;
          if(!(pid= fork())){
          printf(“Hi I am child process!\n”);
          sleep(10);
          return;
          }
          else{
          printf(“send signal to child process (%d) \n”,pid);
          sleep(1);
          kill(pid ,SIGABRT);
          wait(&status);
          if(WIFSIGNALED(status))
          printf(“chile process receive signal %d\n”,WTERMSIG(status));
          }
          }

          執(zhí)行?? sen signal to child process(3170)
          Hi I am child process!
          child process receive signal 6

           


          pause(讓進(jìn)程暫停直到信號(hào)出現(xiàn))??
          相關(guān)函數(shù)?? kill,signal,sleep

          表頭文件?? #include<unistd.h>

          定義函數(shù)?? int pause(void);

          函數(shù)說(shuō)明?? pause()會(huì)令目前的進(jìn)程暫停(進(jìn)入睡眠狀態(tài)),直到被信號(hào)(signal)所中斷。

          返回值?? 只返回-1。

          錯(cuò)誤代碼?? EINTR 有信號(hào)到達(dá)中斷了此函數(shù)。

           


          sigaction(查詢或設(shè)置信號(hào)處理方式)??
          相關(guān)函數(shù)?? signal,sigprocmask,sigpending,sigsuspend

          表頭文件?? #include<signal.h>

          定義函數(shù)?? int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);

          函數(shù)說(shuō)明?? sigaction()會(huì)依參數(shù)signum指定的信號(hào)編號(hào)來(lái)設(shè)置該信號(hào)的處理函數(shù)。參數(shù)signum可以指定SIGKILL和SIGSTOP以外的所有信號(hào)。
          如參數(shù)結(jié)構(gòu)sigaction定義如下
          struct sigaction
          {
          void (*sa_handler) (int);
          sigset_t sa_mask;
          int sa_flags;
          void (*sa_restorer) (void);
          }
          sa_handler此參數(shù)和signal()的參數(shù)handler相同,代表新的信號(hào)處理函數(shù),其他意義請(qǐng)參考signal()。
          sa_mask 用來(lái)設(shè)置在處理該信號(hào)時(shí)暫時(shí)將sa_mask 指定的信號(hào)擱置。
          sa_restorer 此參數(shù)沒(méi)有使用。
          sa_flags 用來(lái)設(shè)置信號(hào)處理的其他相關(guān)操作,下列的數(shù)值可用。
          OR 運(yùn)算(|)組合
          A_NOCLDSTOP : 如果參數(shù)signum為SIGCHLD,則當(dāng)子進(jìn)程暫停時(shí)并不會(huì)通知父進(jìn)程
          SA_ONESHOT/SA_RESETHAND:當(dāng)調(diào)用新的信號(hào)處理函數(shù)前,將此信號(hào)處理方式改為系統(tǒng)預(yù)設(shè)的方式。
          SA_RESTART:被信號(hào)中斷的系統(tǒng)調(diào)用會(huì)自行重啟
          SA_NOMASK/SA_NODEFER:在處理此信號(hào)未結(jié)束前不理會(huì)此信號(hào)的再次到來(lái)。
          如果參數(shù)oldact不是NULL指針,則原來(lái)的信號(hào)處理方式會(huì)由此結(jié)構(gòu)sigaction 返回。

          返回值?? 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。

          錯(cuò)誤代碼?? EINVAL 參數(shù)signum 不合法, 或是企圖攔截SIGKILL/SIGSTOPSIGKILL信號(hào)
          EFAULT 參數(shù)act,oldact指針地址無(wú)法存取。
          EINTR 此調(diào)用被中斷

          范例?? #include<unistd.h>
          #include<signal.h>
          void show_handler(struct sigaction * act)
          {
          switch (act->sa_flags)
          {
          case SIG_DFL:printf(“Default action\n”);break;
          case SIG_IGN:printf(“Ignore the signal\n”);break;
          default: printf(“0x%x\n”,act->sa_handler);
          }
          }
          main()
          {
          int i;
          struct sigaction act,oldact;
          act.sa_handler = show_handler;
          act.sa_flags = SA_ONESHOT|SA_NOMASK;
          sigaction(SIGUSR1,&act,&oldact);
          for(i=5;i<15;i++)
          {
          printf(“sa_handler of signal %2d =”.i);
          sigaction(i,NULL,&oldact);
          }
          }

          執(zhí)行?? sa_handler of signal 5 = Default action
          sa_handler of signal 6= Default action
          sa_handler of signal 7 = Default action
          sa_handler of signal 8 = Default action
          sa_handler of signal 9 = Default action
          sa_handler of signal 10 = 0x8048400
          sa_handler of signal 11 = Default action
          sa_handler of signal 12 = Default action
          sa_handler of signal 13 = Default action
          sa_handler of signal 14 = Default action

           


          sigaddset(增加一個(gè)信號(hào)至信號(hào)集)??
          相關(guān)函數(shù)?? sigemptyset,sigfillset,sigdelset,sigismember

          表頭文件?? #include<signal.h>

          定義函數(shù)?? int sigaddset(sigset_t *set,int signum);

          函數(shù)說(shuō)明?? sigaddset()用來(lái)將參數(shù)signum 代表的信號(hào)加入至參數(shù)set 信號(hào)集里。

          返回值?? 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。

          錯(cuò)誤代碼?? EFAULT 參數(shù)set指針地址無(wú)法存取
          EINVAL 參數(shù)signum非合法的信號(hào)編號(hào)

           


          sigdelset(從信號(hào)集里刪除一個(gè)信號(hào))??
          相關(guān)函數(shù)?? sigemptyset,sigfillset,sigaddset,sigismember

          表頭文件?? #include<signal.h>

          定義函數(shù)?? int sigdelset(sigset_t * set,int signum);

          函數(shù)說(shuō)明?? sigdelset()用來(lái)將參數(shù)signum代表的信號(hào)從參數(shù)set信號(hào)集里刪除。

          返回值?? 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。

          錯(cuò)誤代碼?? EFAULT 參數(shù)set指針地址無(wú)法存取
          EINVAL 參數(shù)signum非合法的信號(hào)編號(hào)

           


          sigemptyset(初始化信號(hào)集)??
          相關(guān)函數(shù)?? sigaddset,sigfillset,sigdelset,sigismember

          表頭文件?? #include<signal.h>

          定義函數(shù)?? int sigemptyset(sigset_t *set);

          函數(shù)說(shuō)明?? sigemptyset()用來(lái)將參數(shù)set信號(hào)集初始化并清空。

          返回值?? 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。

          錯(cuò)誤代碼?? EFAULT 參數(shù)set指針地址無(wú)法存取

           


          sigfillset(將所有信號(hào)加入至信號(hào)集)??
          相關(guān)函數(shù)?? sigempty,sigaddset,sigdelset,sigismember

          表頭文件?? #include<signal.h>

          定義函數(shù)?? int sigfillset(sigset_t * set);

          函數(shù)說(shuō)明?? sigfillset()用來(lái)將參數(shù)set信號(hào)集初始化,然后把所有的信號(hào)加入到此信號(hào)集里。

          返回值?? 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。

          附加說(shuō)明?? EFAULT 參數(shù)set指針地址無(wú)法存取

           


          sigismember(測(cè)試某個(gè)信號(hào)是否已加入至信號(hào)集里)??
          相關(guān)函數(shù)?? sigemptyset,sigfillset,sigaddset,sigdelset

          表頭文件?? #include<signal.h>

          定義函數(shù)?? int sigismember(const sigset_t *set,int signum);

          函數(shù)說(shuō)明?? sigismember()用來(lái)測(cè)試參數(shù)signum 代表的信號(hào)是否已加入至參數(shù)set信號(hào)集里。如果信號(hào)集里已有該信號(hào)則返回1,否則返回0。

          返回值?? 信號(hào)集已有該信號(hào)則返回1,沒(méi)有則返回0。如果有錯(cuò)誤則返回-1。

          錯(cuò)誤代碼?? EFAULT 參數(shù)set指針地址無(wú)法存取
          EINVAL 參數(shù)signum 非合法的信號(hào)編號(hào)

           


          signal(設(shè)置信號(hào)處理方式)??
          相關(guān)函數(shù)?? sigaction,kill,raise

          表頭文件?? #include<signal.h>

          定義函數(shù)?? void (*signal(int signum,void(* handler)(int)))(int);

          函數(shù)說(shuō)明?? signal()會(huì)依參數(shù)signum 指定的信號(hào)編號(hào)來(lái)設(shè)置該信號(hào)的處理函數(shù)。當(dāng)指定的信號(hào)到達(dá)時(shí)就會(huì)跳轉(zhuǎn)到參數(shù)handler指定的函數(shù)執(zhí)行。如果參數(shù)handler不是函數(shù)指針,則必須是下列兩個(gè)常數(shù)之一:
          SIG_IGN 忽略參數(shù)signum指定的信號(hào)。
          SIG_DFL 將參數(shù)signum 指定的信號(hào)重設(shè)為核心預(yù)設(shè)的信號(hào)處理方式。
          關(guān)于信號(hào)的編號(hào)和說(shuō)明,請(qǐng)參考附錄D

          返回值?? 返回先前的信號(hào)處理函數(shù)指針,如果有錯(cuò)誤則返回SIG_ERR(-1)。

          附加說(shuō)明?? 在信號(hào)發(fā)生跳轉(zhuǎn)到自定的handler處理函數(shù)執(zhí)行后,系統(tǒng)會(huì)自動(dòng)將此處理函數(shù)換回原來(lái)系統(tǒng)預(yù)設(shè)的處理方式,如果要改變此操作請(qǐng)改用sigaction()。

          范例?? 參考alarm()或raise()。

           


          sigpending(查詢被擱置的信號(hào))??
          相關(guān)函數(shù)?? signal,sigaction,sigprocmask,sigsuspend

          表頭文件?? #include<signal.h>

          定義函數(shù)?? int sigpending(sigset_t *set);

          函數(shù)說(shuō)明?? sigpending()會(huì)將被擱置的信號(hào)集合由參數(shù)set指針?lè)祷亍?br />
          返回值執(zhí)?? 行成功則返回0,如果有錯(cuò)誤則返回-1。

          錯(cuò)誤代碼?? EFAULT 參數(shù)set指針地址無(wú)法存取
          EINTR 此調(diào)用被中斷。

           


          sigprocmask(查詢或設(shè)置信號(hào)遮罩)??
          相關(guān)函數(shù)?? signal,sigaction,sigpending,sigsuspend

          表頭文件?? #include<signal.h>

          定義函數(shù)?? int sigprocmask(int how,const sigset_t *set,sigset_t * oldset);

          函數(shù)說(shuō)明?? sigprocmask()可以用來(lái)改變目前的信號(hào)遮罩,其操作依參數(shù)how來(lái)決定
          SIG_BLOCK 新的信號(hào)遮罩由目前的信號(hào)遮罩和參數(shù)set 指定的信號(hào)遮罩作聯(lián)集
          SIG_UNBLOCK 將目前的信號(hào)遮罩刪除掉參數(shù)set指定的信號(hào)遮罩
          SIG_SETMASK 將目前的信號(hào)遮罩設(shè)成參數(shù)set指定的信號(hào)遮罩。
          如果參數(shù)oldset不是NULL指針,那么目前的信號(hào)遮罩會(huì)由此指針?lè)祷亍?br />
          返回值?? 執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1。

          錯(cuò)誤代碼?? EFAULT 參數(shù)set,oldset指針地址無(wú)法存取。
          EINTR 此調(diào)用被中斷

           


          sleep(讓進(jìn)程暫停執(zhí)行一段時(shí)間)??
          相關(guān)函數(shù)?? signal,alarm

          表頭文件?? #include<unistd.h>

          定義函數(shù)?? unsigned int sleep(unsigned int seconds);

          函數(shù)說(shuō)明?? sleep()會(huì)令目前的進(jìn)程暫停,直到達(dá)到參數(shù)seconds 所指定的時(shí)間,或是被信號(hào)所中斷。

          返回值?? 若進(jìn)程暫停到參數(shù)seconds 所指定的時(shí)間則返回0,若有信號(hào)中斷則返回剩余秒數(shù)。

           


          ferror(檢查文件流是否有錯(cuò)誤發(fā)生)??
          相關(guān)函數(shù)?? clearerr,perror

          表頭文件?? #include<stdio.h>

          定義函數(shù)?? int ferror(FILE *stream);

          函數(shù)說(shuō)明?? ferror()用來(lái)檢查參數(shù)stream所指定的文件流是否發(fā)生了錯(cuò)誤情況,如有錯(cuò)誤發(fā)生則返回非0值。

          返回值?? 如果文件流有錯(cuò)誤發(fā)生則返回非0值。

           


          perror(打印出錯(cuò)誤原因信息字符串)??
          相關(guān)函數(shù)?? strerror

          表頭文件?? #include<stdio.h>

          定義函數(shù)?? void perror(const char *s);

          函數(shù)說(shuō)明?? perror()用來(lái)將上一個(gè)函數(shù)發(fā)生錯(cuò)誤的原因輸出到標(biāo)準(zhǔn)錯(cuò)誤(stderr)。參數(shù)s所指的字符串會(huì)先打印出,后面再加上錯(cuò)誤原因字符串。此錯(cuò)誤原因依照全局變量errno的值來(lái)決定要輸出的字符串。

          返回值??

          范例?? #include<stdio.h>
          main()
          {
          FILE *fp;
          fp = fopen(“/tmp/noexist”,”r+”);
          if(fp = =NULL) perror(“fopen”);
          }

          執(zhí)行?? $ ./perror
          fopen : No such file or diretory

           


          strerror(返回錯(cuò)誤原因的描述字符串)??
          相關(guān)函數(shù)?? perror

          表頭文件?? #include<string.h>

          定義函數(shù)?? char * strerror(int errnum);

          函數(shù)說(shuō)明?? strerror()用來(lái)依參數(shù)errnum的錯(cuò)誤代碼來(lái)查詢其錯(cuò)誤原因的描述字符串,然后將該字符串指針?lè)祷亍?br />
          返回值?? 返回描述錯(cuò)誤原因的字符串指針。

          范例?? /* 顯示錯(cuò)誤代碼0 至9 的錯(cuò)誤原因描述*/
          #include<string.h>
          main()
          {
          int i;
          for(i=0;i<10;i++)
          printf(“%d : %s\n”,i,strerror(i));
          }

          執(zhí)行?? 0 : Success
          1 : Operation not permitted
          2 : No such file or directory
          3 : No such process
          4 : Interrupted system call
          5 : Input/output error
          6 : Device not configured
          7 : Argument list too long
          8 : Exec format error
          9 : Bad file descriptor

           


          mkfifo(建立具名管道)??
          相關(guān)函數(shù)?? pipe,popen,open,umask

          表頭文件?? #include<sys/types.h>
          #include<sys/stat.h>

          定義函數(shù)?? int mkfifo(const char * pathname,mode_t mode);

          函數(shù)說(shuō)明?? mkfifo()會(huì)依參數(shù)pathname建立特殊的FIFO文件,該文件必須不存在,而參數(shù)mode為該文件的權(quán)限(mode%~umask),因此umask值也會(huì)影響到FIFO文件的權(quán)限。Mkfifo()建立的FIFO文件其他進(jìn)程都可以用讀寫一般文件的方式存取。當(dāng)使用open()來(lái)打開(kāi)FIFO文件時(shí),O_NONBLOCK旗標(biāo)會(huì)有影響
          1、當(dāng)使用O_NONBLOCK 旗標(biāo)時(shí),打開(kāi)FIFO 文件來(lái)讀取的操作會(huì)立刻返回,但是若還沒(méi)有其他進(jìn)程打開(kāi)FIFO 文件來(lái)讀取,則寫入的操作會(huì)返回ENXIO 錯(cuò)誤代碼。
          2、沒(méi)有使用O_NONBLOCK 旗標(biāo)時(shí),打開(kāi)FIFO 來(lái)讀取的操作會(huì)等到其他進(jìn)程打開(kāi)FIFO文件來(lái)寫入才正常返回。同樣地,打開(kāi)FIFO文件來(lái)寫入的操作會(huì)等到其他進(jìn)程打開(kāi)FIFO 文件來(lái)讀取后才正常返回。

          返回值?? 若成功則返回0,否則返回-1,錯(cuò)誤原因存于errno中。

          錯(cuò)誤代碼?? EACCESS 參數(shù)pathname所指定的目錄路徑無(wú)可執(zhí)行的權(quán)限
          EEXIST 參數(shù)pathname所指定的文件已存在。
          ENAMETOOLONG 參數(shù)pathname的路徑名稱太長(zhǎng)。
          ENOENT 參數(shù)pathname包含的目錄不存在
          ENOSPC 文件系統(tǒng)的剩余空間不足
          ENOTDIR 參數(shù)pathname路徑中的目錄存在但卻非真正的目錄。
          EROFS 參數(shù)pathname指定的文件存在于只讀文件系統(tǒng)內(nèi)。

          范例?? #include<sys/types.h>
          #include<sys/stat.h>
          #include<fcntl.h>
          main()
          {
          char buffer[80];
          int fd;
          unlink(FIFO);
          mkfifo(FIFO,0666);
          if(fork()>0){
          char s[ ] = “hello!\n”;
          fd = open (FIFO,O_WRONLY);
          write(fd,s,sizeof(s));
          close(fd);
          }
          else{
          fd= open(FIFO,O_RDONLY);
          read(fd,buffer,80);
          printf(“%s”,buffer);
          close(fd);
          }
          }

          執(zhí)行?? hello!

           


          pclose(關(guān)閉管道I/O)??
          相關(guān)函數(shù)?? popen

          表頭文件?? #include<stdio.h>

          定義函數(shù)?? int pclose(FILE * stream);

          函數(shù)說(shuō)明?? pclose()用來(lái)關(guān)閉由popen所建立的管道及文件指針。參數(shù)stream為先前由popen()所返回的文件指針。

          返回值?? 返回子進(jìn)程的結(jié)束狀態(tài)。如果有錯(cuò)誤則返回-1,錯(cuò)誤原因存于errno中。

          錯(cuò)誤代碼?? ECHILD pclose()無(wú)法取得子進(jìn)程的結(jié)束狀態(tài)。

          范例?? 參考popen()。

           


          pipe(建立管道)??
          相關(guān)函數(shù)?? mkfifo,popen,read,write,fork

          表頭文件?? #include<unistd.h>

          定義函數(shù)?? int pipe(int filedes[2]);

          函數(shù)說(shuō)明?? pipe()會(huì)建立管道,并將文件描述詞由參數(shù)filedes數(shù)組返回。filedes[0]為管道里的讀取端,filedes[1]則為管道的寫入端。

          返回值?? 若成功則返回零,否則返回-1,錯(cuò)誤原因存于errno中。

          錯(cuò)誤代碼?? EMFILE 進(jìn)程已用完文件描述詞最大量。
          ENFILE 系統(tǒng)已無(wú)文件描述詞可用。
          EFAULT 參數(shù)filedes數(shù)組地址不合法。

          范例?? /* 父進(jìn)程借管道將字符串“hello!\n”傳給子進(jìn)程并顯示*/
          #include <unistd.h>
          main()
          {
          int filedes[2];
          char buffer[80];
          pipe(filedes);
          if(fork()>0){
          /* 父進(jìn)程*/
          char s[ ] = “hello!\n”;
          write(filedes[1],s,sizeof(s));
          }
          else{
          /*子進(jìn)程*/
          read(filedes[0],buffer,80);
          printf(“%s”,buffer);
          }
          }

          執(zhí)行?? hello!

           


          popen(建立管道I/O)??
          相關(guān)函數(shù)?? pipe,mkfifo,pclose,fork,system,fopen

          表頭文件?? #include<stdio.h>

          定義函數(shù)?? FILE * popen( const char * command,const char * type);

          函數(shù)說(shuō)明?? popen()會(huì)調(diào)用fork()產(chǎn)生子進(jìn)程,然后從子進(jìn)程中調(diào)用/bin/sh -c來(lái)執(zhí)行參數(shù)command的指令。參數(shù)type可使用“r”代表讀取,“w”代表寫入。依照此type值,popen()會(huì)建立管道連到子進(jìn)程的標(biāo)準(zhǔn)輸出設(shè)備或標(biāo)準(zhǔn)輸入設(shè)備,然后返回一個(gè)文件指針。隨后進(jìn)程便可利用此文件指針來(lái)讀取子進(jìn)程的輸出設(shè)備或是寫入到子進(jìn)程的標(biāo)準(zhǔn)輸入設(shè)備中。此外,所有使用文件指針(FILE*)操作的函數(shù)也都可以使用,除了fclose()以外。

          返回值?? 若成功則返回文件指針,否則返回NULL,錯(cuò)誤原因存于errno中。

          錯(cuò)誤代碼?? EINVAL參數(shù)type不合法。

          注意事項(xiàng)?? 在編寫具SUID/SGID權(quán)限的程序時(shí)請(qǐng)盡量避免使用popen(),popen()會(huì)繼承環(huán)境變量,通過(guò)環(huán)境變量可能會(huì)造成系統(tǒng)安全的問(wèn)題。

          范例?? #include<stdio.h>
          main()
          {
          FILE * fp;
          char buffer[80];
          fp=popen(“cat /etc/passwd”,”r”);
          fgets(buffer,sizeof(buffer),fp);
          printf(“%s”,buffer);
          pclose(fp);
          }

          posted on 2008-03-24 16:31 allic 閱讀(898) 評(píng)論(0)  編輯  收藏 所屬分類: linux/UNIX 應(yīng)用開(kāi)發(fā)
          主站蜘蛛池模板: 邵阳市| 濮阳市| 新巴尔虎右旗| 古浪县| 剑阁县| 饶河县| 上林县| 离岛区| 安庆市| 华蓥市| 斗六市| 清水县| 赣榆县| 临泽县| 湘西| 宁津县| 武威市| 莆田市| 钦州市| 长白| 新蔡县| 山阳县| 五寨县| 屯门区| 上栗县| 和静县| 论坛| 惠安县| 桂平市| 静宁县| 宁海县| 烟台市| 陕西省| 盐边县| 石景山区| 浦东新区| 汶上县| 临潭县| 太谷县| 胶南市| 海阳市|