我正在尝试制作一个程序,使用所述系统调用将 512 个字节从一个文件复制到另一个文件(我可以制作几个缓冲区,memcpy() 然后 fwrite() 但我想练习 Unix 特定的低级 I/ ○)。这是代码的开头:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
int src, dest, bytes_read;
char tmp_buf[512];
if (argc < 3)
printf("Needs 2 arguments.");
printf("And this message I for some reason don't see.... o_O");
if ((src = open(argv[1], O_RDWR, 0)) == -1 || (dest = open(argv[2], O_CREAT, 0)) == -1)
perror("Error");
while ((bytes_read = read(src, tmp_buf, 512)) != -1)
write(dest, tmp_buf, 512);
return 0;
}
我知道我没有处理读取的文件大小不会是 512 的倍数的事实。但首先我真的需要弄清楚两件事:
为什么我的消息没有显示?也没有分段错误,所以我最终不得不抄送程序
这些低级函数究竟是如何工作的?是否有一个指针随着每个系统调用而变化,比如如果我们使用 FILE *file 和 fwrite,我们的 *file 会自动递增,还是我们必须手动递增文件指针?如果是这样,假设 open() 等从不指定文件指针,而只是指定文件 ID,我们将如何访问它?
任何帮助都会很棒。请。谢谢!