当前位置:  技术问答>linux和unix

execvp的一个问题

    来源: 互联网  发布时间:2016-08-01

    本文导语:  我们在终端上执行mysqldump命令这样: mysqldump --hex-blob -h 127.0.0.1 -uroot -proot ss_a > /ftp/db/ss_a.sql 现在写程序调用mysqldump执行这一个备份操作: argp[0] = "mysqldump"; argp[1] = "--hex-blob"; argp[2] = "-h"; argp[3] = val1...

我们在终端上执行mysqldump命令这样:
mysqldump --hex-blob -h 127.0.0.1 -uroot -proot ss_a > /ftp/db/ss_a.sql

现在写程序调用mysqldump执行这一个备份操作:
argp[0] = "mysqldump";
argp[1] = "--hex-blob";
argp[2] = "-h";
argp[3] = val1;
sprintf(argv_user,"-u%s",val2);
argp[4] = argv_user;

sprintf(argv_passwd,"-p%s",val3);
argp[5] = argv_passwd;

argp[6] = "account";
argp[7] = ">";
strcpy(sql_dump_file,ftp_file_path);
strcat(sql_dump_file,"/account.sql");
argp[8] = sql_dump_file;
argp[9] = (ha_char *)NULL;


然后fork一个进程调用
execvp("mysqldump",argp)

程序提示数据库没有表格 '>'

原来Mysqldump程序把argp7当做了表的名称。 本来>应该是重定向的标准输出。

我想在调用fork以前执行重定向一下标准输出,但是由于这个函数是在一个子进程中执行的,所以担心随便修改标准输出会影响主进程的工作,也会将主进程的输出重定向到文件中,这样Dump出来的的数据就是错的了
由于某种原因,还不能把重定向标准输出放在Fork的子进程中。

在这种情况下,如何解决这个问题呢?
谢谢

|

用system就可以了,如果不想用system
可以在fork后,子进程的部分,execvp之前修改stdout
if (0 == (pid = fork())) {
    fclose(stdout);
    stdout = fopen("/ftp/db/ss_a.sql", "wb");
    execvp(...);
}

|

是啊 这个用起来很方便啊


|
父子进程之间没有共享内存和资源
所以你尽管放心把子进程的标准输出重定向到文件

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • fork + execvp
  • execvp()函数
  • 关于execvp的一段程序
  • 关于execvp函数的使用


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3