gpt4 book ai didi

c - 简单 C 程序的 exec 段错误

转载 作者:行者123 更新时间:2023-11-30 17:01:30 25 4
gpt4 key购买 nike

在 gdb 中运行一个简单的程序,用于 fork 并执行客户端。 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>");

有什么想法吗?我什么也没得到,只有段错误本身,我立即得到它。

最佳答案

来自man execl:

The list of arguments must be terminated by a null pointer, and, since these are variadic functions, this pointer must be cast (char *) NULL.

所以这一行

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

应该是

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

关于c - 简单 C 程序的 exec 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com