grep或写作更好的功能

时间:2014-12-17 12:25:57

标签: c linux performance

我正在编写一个程序,从一个驱动器复制到另一个驱动器,我正在使用 fdisk -l > fdiskOutput.txt检查设备是否存在。

然后我将文件的内容写入缓冲区。并使用strstr我正在检查 /dev/sda2/dev/sdb1等条目并执行复制操作。

代码如下:

#include<stdio.h>
main()
{
    char * buff;
    int fileLength=0;
    system("fdisk -l > /fdiskinfo.txt");
    fileLength=GetFileLength("/fdiskinfo.txt");
    buff = malloc(fileLength);
    int fid = open("/fdiskinfo.txt",O_RDONLY);
    read(ifd,buff,fileLength+1);
    if((strstr(buff,"/dev/sda2") !=NULL && (strstr(buff,"/dev/sdb1") != NULL)
    {
         /*do copy operation */
    }
    else
    { 
        /* print something went wrong */
    }
        // method 2: using grep command
    {
    if(system("grep '/dev/sda2' /fdiskinfo.txt")==0 && system("grep /dev/sdb1 /fdiskinfo.txt");
    {
        /* copy operation */
    }
 }  

2 个答案:

答案 0 :(得分:1)

更好的方法是编写代码进行检查。因为当你打电话的时候 系统函数,它创建新的子进程,这将消耗一些内存 新子进程的空间。

因此,在孩子结束之前,它会停止执行工作流程。我的选择是代码 比使用该系统更好。

答案 1 :(得分:1)

你为什么这样做?只是做:

char * target = argv[2]; /* or whichever arg you prefer */
dst = fopen( target, "w" );
if( dst == NULL ) {
  perror( target );
  exit( EXIT_FAILURE );
}

如果分区不存在,fopen将失败,您将收到一条很好的错误消息,解释原因。