書上抄了一個fork系統調用講解的例子,代碼如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main(void)

{

char buf[100] = {0};

pid_t cld_pid;

int fd;

int status;

if((fd = open("temp", O_CREAT | O_RDWR | O_TRUNC, 0664)) == -1)

{

perror("創建文件");

exit(1);

}

strcpy(buf, "父進程數據");

if((cld_pid = fork()) == 0)

{

strcpy(buf, "子進程數據");

puts("子進程正在工作:");

printf("子進程 PID 是%d\n",getpid());

printf("父進程 PID 是%d\n",getppid());

write(fd, buf, strlen(buf));

close(fd);

exit(0);

}

else

{

puts("父進程正在工作:");

printf("父進程 PID 是%d\n", getppid());

printf("子進程 PID 是%d\n", getpid());

write(fd, buf, strlen(buf));

close(fd);

}

wait(&status);

return 0;

}

編寫結束,運行gcc -o fork_test fork_test.c,就是報錯

/usr/bin/ld: cannot open output file fork_test: Is a directory

collect2: ld 返回 1

代碼檢查了好幾次都沒有Wen題,百度也百思不得其解。

打算刪除代碼Wen件夾時,發現fork_test.c沒有存到fork_test wen件夾中(他倆同時出現在一個目錄中),順手放進去又編譯了一次,居然通過了。

父進程正在工作:

父進程 PID 是7412

子進程 PID 是7493

子進程正在工作:

子進程 PID 是7494

父進程 PID 是7493

原因不知Wei什么?至少是個教訓。

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐