我正在编写一个程序,从一个驱动器复制到另一个驱动器,我正在使用
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 */
}
}
答案 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将失败,您将收到一条很好的错误消息,解释原因。