Linux中GCC编辑器的使用和用fork创建子进程

和代码应该没有太大关系
下面是建立一个二进制文件“file1.bin”的程序,向其中写入一些整形数,然后将该文件内容复制到另一个文件中“file2.bin”。程序rwbfile.c的代码如下

# include <stdio.h>
# include <stdlib.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <unistd.h>
# include <fcntl.h>
# include <string.h>
# define NUM 10
# define file1 "file1.bin"
# define file2 "file2.bin"
# define OFFSET 0
int main()
{
  FILE * sf,*df;
  int rnum = 0;
  int data[NUM];
  int digit = 0;
  int i=0,j=10;
  sf =fopen(file1,"w+");
  if(sf==0)
  {
  printf("open file error!\n");
  exit(1);
}
  for(;j>0;j--)
{
    for(i=0;i<NUM;i++)
    {
      data[i]=digit;
    }
    digit++;
    rnum = fwrite(data,sizeof(int),NUM,sf);
}
df = fopen(file2,"w+");
if(df==0)
{
  printf("open file error!\n");
  exit(1);
}
fseek(sf,OFFSET,SEEK_SET);
printf("file1:\n");
while((rnum= fread(data,sizeof(int),NUM,sf))> 0)
{
    for(i=0;i<rnum;i++)
{
  printf("%d",data[i]);
}
printf("\n");
fwrite(data,sizeof(int),rnum,df);
}
fseek(df,OFFSET,SEEK_SET);
printf("file2:\n");
while((rnum = fread(data,sizeof(int),NUM,df))>0)
{
  for(i =0;i<rnum;i++)
  {
    printf("%d",data[i]);
  }
    printf("\n");
}
  fclose(sf);
  fclose(df);
  return 0;
}

问题是程序运行以后,在磁盘的当前目录下,是否有文件”file1.bin” “file2.bin”产生?如果有,那么他们的内容可以直接读取吗?分析原因。
我查看了是有的,但是看是否可以打开的时候出现了以下问题

img


这到底是可不可以打开,还有就是如何修改读写缓存大小使其一次可以读取256B
在一个就是用fork创建子进程后程序输出内容中间会出现shell提示符?

img

img

问题一与扩展名有关,*.bin是与*.obj类似的编译输出文件,会被系统解释为二进制文件并且需要特殊权限才能打开,一般会被按照二进制数据打开。
问题二与你退出主线程时没有关闭子线程,发生了资源泄漏有关。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    抱歉,我需要一个具体的问题才能为您提供解决方案。请问有哪些问题需要解决呢?


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^