我正在阅读K& R的C编程,我刚刚开始了最后一章:UNIX SYSTEM INTERFACE。我遇到了一个进行系统调用的文件复制代码。首先我在codeblocks windows中编译了这个代码我得到了一个dir / file找不到的错误然后我认为我应该在Linux中编译这个代码。但是我得到了同样的错误。
我在stackoverflow上读了一些其他问题: sudo apt-get update 再次安装linux头文件
读取使用syscall.h的地方但是BUFSIZ没有在那里定义,我不认为这本书是错误的。
#include "syscalls.h"
main()
{
char buf[BUFSIZ];
int n;
while((read(0,buf,BIFSIZ))>0)
write(1,buf,n)
return 0;
}
答案 0 :(得分:3)
#include <unistd.h>
#include<stdio.h>
main()
{
char buf[BUFSIZ];
int n;
while((n = read(0,buf,BUFSIZ))>0)
write(1,buf,n); //Output to the Console
return 0;
}
编辑: unistd.h
可以使用。修正了错字!
<强>输出:强>
myunix:/u/mahesh> echo "Hi\nWorld" | a.out
Hi
World
答案 1 :(得分:1)
将"syscalls.h"
更改为<sys/syscall.h>
。这是Linux中正确的标题。
添加#include <stdio.h>
以获取BUFSIZE
。
您的代码中也有一些拼写错误:
- 在while语句中将BIFSIZE
更改为BUFSIZE
。现在它将编译。
- 但是,你也忘了在循环中指定n
。更改为n = read(
最终代码应为:
#include <stdio.h>
#include <sys/syscall.h>
main()
{
char buf[BUFSIZ];
int n;
while((n = read(0,buf,BUFSIZ))>0)
write(1,buf,n);
return 0;
}