popen 使用方法和kill功能描述

转http://blog.csdn.net/stone8761/article/details/77498439

[ KILL ]功能描述: 转 https://www.cnblogs.com/leeming0222/articles/3994125.html
用于向任何进程组或进程发送信号。

头文件用法:


#include <sys/types.h>
 
#include <signal.h>

int kill(pid_t pid, int sig);
 

 

参数: 
pid:可能选择有以下四种

1. pid大于零时,pid是信号欲送往的进程的标识。
2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。
3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。
4. pid小于-1时,信号将送往以-pid为组标识的进程。

sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig值为零来检验某个进程是否仍在执行。


返回值说明: 成功执行时,返回0。失败返回-1,errno被设为以下的某个值 EINVAL:指定的信号码无效(参数 sig 不合法) EPERM;权限不够无法传送信号给指定进程 ESRCH:参数 pid 所指定的进程或进程组不存在

popen()可以执行shell命令,并读取此命令的返回值;  

     popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。可以通过这个管道执行标准输入输出操作。这个管道必须由pclose()函数关闭,必须由pclose()函数关闭,必须由pclose()函数关闭而不是fclose()函数(若使用fclose则会产生僵尸进程)。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exit一样。

 type参数只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。如果type是"r"则文件指针连接到command的标准输出;如果type是"w"则文件指针连接到command的标准输入。

  command参数是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。

  popen()的返回值是个标准I/O流,必须由pclose来终止。前面提到这个流是单向的(只能用于读或写)。向这个流写内容相当于写入该命令的标准输入,命令的标准输出和调用popen()的进程相同;与之相反的,从流中读数据相当于读取命令的标准输出,命令的标准输入和调用popen()的进程相同。

返回值

  如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流。popen()没有为内存分配失败设置errno值。如果调用fork()或pipe()时出现错误,errno被设为相应的错误类型。如果type参数不合法,errno将返回EINVAL。

 

函数原型

FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

例:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <unistd.h>  
  4. #include <string.h>  
  5.   
  6. void  
  7. print_result(FILE *fp)  
  8. {  
  9.         char buf[100];  
  10.   
  11.         if(!fp) {  
  12.                 return;  
  13.         }  
  14.         printf("\n>>>\n");  
  15.         while(memset(buf, 0, sizeof(buf)), fgets(buf, sizeof(buf) - 1, fp) != 0 ) {  
  16.                 printf("%s", buf);  
  17.         }  
  18.         printf("\n<<<\n");  
  19. }  
  20.   
  21. int  
  22. main(void)  
  23. {  
  24.         FILE *fp = NULL;  
  25.   
  26.         while(1) {  
  27.                 fp = NULL;  
  28.                 fp = popen("ls""r");  
  29.                 if(!fp) {  
  30.                         perror("popen");  
  31.                         exit(EXIT_FAILURE);  
  32.                 }  
  33.                 print_result(fp);  
  34.                 pclose(fp);  
  35.                 sleep(1);  
  36.         }  
  37. }  

猜你喜欢

转载自blog.csdn.net/weixin_38638777/article/details/79377405