作为初学者,我正在尝试编写一个简单的c程序来学习和执行“写”功能。
我正在尝试执行一个简单的c程序simple_write.c
#include <unistd.h>
#include <stdlib.h>
int main()
{
if ((write(1, “Here is some data\n”, 18)) != 18)
write(2, “A write error has occurred on file descriptor 1\n”,46);
exit(0);
}
我也执行chmod + x simple_write.c
但是当我执行./simple_write.c时,它会在意外令牌附近给出语法错误'('
无法弄清楚为什么会这样?
P.S:预期的输出是: -
$ ./simple_write
Here is some data
$
答案 0 :(得分:6)
你做了
$ chmod +x simple_write.c
$ ./simple_write.c
什么时候应该完成
$ cc simple_write.c -o simple_write$ chmod +x simple_write# On second thought, you probably don’t need this. $ ./simple_write
用文字: 编译 程序来创建可执行文件simple_write
(没有 .c
)文件,然后运行它。
你所做的是尝试执行你的C源代码文件
作为shell脚本。
注意:
simple_write
文件将是二进制文件。
不要使用适用于文本文件的工具来查看它
(例如,cat
,less
或文本编辑器,例如gedit
)。 cc
是C编译器的历史名称。
如果你得到cc: not found
(或等价物),
再次使用gcc
(GNU C编译器)尝试该命令。
如果这不起作用,
当你开始编写更复杂的程序时, 你将要使用
make simple_write
具有
的优点cc
或gcc
)。事实上,你现在应该可以使用上面的命令了。 这可能(或可能不)简化您的生活。
P.S。现在这个问题出现在Stack Overflow上, 我被允许谈论它的编程方面。 在我看来它应该编译,但
第一个write
行的括号多于所需的括号。
if (write(1, "Here is some data\n", 18) != 18)
应该有用。
write
行中,
我将字符串计为48个字符,而不是46个。顺便问一下,你知道如何让第一个write
失败,
所以第二个会执行?尝试
./simple_write >&-
答案 1 :(得分:5)
您无法直接在Linux(或其他系统)中执行C源代码。
C是一种需要编译为二进制格式的语言。
您需要安装C compiler(实际程序因您的系统而异),编译您的程序,然后才能执行它。
目前它是由shell解释的。以#
开头的前两行被忽略为注释。第三行导致语法错误。
答案 2 :(得分:-1)
确定,
我得到了我做错的事。
这些是我为纠正问题而采取的步骤: -
$ gedit simple_write.c
将代码写入此文件并保存(扩展名为.c)。
$ make simple_write
$ ./simple_write
我得到了理想的输出。
谢谢!