exec segfault of trivial C program

时间:2016-05-03 16:09:32

标签: c segmentation-fault execl

在gdb中运行一个简单的程序,它会分叉并执行客户端。 execl行(在gdb中的劣质2内)给出进程ID"正在执行新程序"然后立即出现故障。

此时的代码如下:

int main(int argc, char *argv[] ) {
/* Create socket pair for communication with server, and fork/exec the server code */
  int ret;
  int fd[2];
  ret = socketpair( AF_LOCAL, SOCK_STREAM | SOCK_NONBLOCK, 0, fd );
  if( ret < 0 ) {
    perror( "Unable to create initial socketpair for qrServer" );
    return -1;
  }
  pid_t pid = fork();
  if (pid == 0) {
    char arg[4];
    bzero( arg, 4 );
    close(fd[1]);
    sprintf( arg, "%d", fd[0] );
    char* filename = "child";
    ret = execl( filename, filename, arg, NULL );

为了完整起见,儿童计划开始如下:

int main(int argc, char *argv[] ) {
/* Create socket pair for communication with server, and fork/exec the server code */
  if( argc < 2 ) {
    perror("Usage: argv[0] <file descriptor>");

有什么想法吗?我什么都没得到,只有seg故障本身,我马上得到它。

1 个答案:

答案 0 :(得分:0)

来自man execl

  

参数列表必须以空指针结束,并且由于这些是可变参数函数,因此必须将此指针强制转换为(char *)NULL。

所以这一行

  ret = execl( filename, filename, arg, NULL );

应该是

  ret = execl( filename, filename, arg, (char*) NULL );