英文:
None of the lines after calling the "system()" function is running
问题
After the line "command(system)", the next lines are not running. A new file "test1" is created but the next lines do not execute.
使用我的Linux Ubuntu终端,我正在尝试编写一个打开新文件的C程序。由于新文件已经创建,这意味着system()函数正在工作。但它不会停止执行。
如果我关闭终端,它会显示"进程正在运行"。我如何停止这个进程?在创建新文件后,我没有获得Linux终端的命令行。
英文:
After the line "command(system)", the next lines are not running. A new file "test1" is created but the next lines do no execute.
Using my linux Ubuntu terminal, I am trying to write a C program for opening a new file. Since the new file is created, it means that the system() function is working. But it does not stop executing.
If I close the terminal, it says "process is running". How do I stop the process? I do not get the linux terminal's line for command after a new file is created.
#include <stdio.h>
#include <stdlib.h>
int main() {
char filename[50];
printf("Enter the filename: ");
scanf("%s", filename);
// Create and open the file using the cat command
char command[100];
sprintf(command, "cat > %s", filename);
system(command);
printf("File '%s' created and opened.\n", filename);
return 0;
}
答案1
得分: 2
> 在"command(system)"这行之后,接下来的行不会运行。一个新文件"test1"被创建,但接下来的行不会执行。
它们目前不会执行。这是因为通过system()
运行的cat
命令正在等待标准输入。system()
函数在cat
终止之前不会返回。在终端窗口中按Ctrl-D应该停止它的等待。
如果你只想创建一个空文件,那么将命令更改为重定向cat
的标准输入将是一种方法:
sprintf(command, "cat < /dev/null > %s", filename);
system(command);
但如果这确实是你想做的全部,那么使用touch
而不是cat
会更符合惯用法:
sprintf(command, "touch %s", filename);
system(command);
英文:
> After the line "command(system)", the next lines are not running. A new file "test1" is created but the next lines do no execute.
They do not execute yet. That's because the cat
command you are running via system()
is waiting for input from its standard input. The system()
function will not return until cat
terminates. Typing Ctrl-D in the terminal window should make it stop waiting.
If all you want to do is create an empty file, then changing the command to redirect cat
's standard input would be one way to go about that:
sprintf(command, "cat < /dev/null > %s", filename);
system(command);
But if that's really all you want to do, then it would be more idiomatic to use touch
instead of cat
:
sprintf(command, "touch %s", filename);
system(command);
答案2
得分: 2
这里的目标并不是完全清楚的。如果您只想创建一个空文件,可以使用常规的C标准库文件函数,而无需使用system()
调用外壳程序。
类似以下的代码可能足够了:
FILE *handle = fopen(filename, "w");
fclose(handle);
如果文件已经存在,但您想要“清空”它:
truncate(filename, 0);
使用system()
来运行一些具有文件重定向的命令极不可移植,可能没有意义。如果您想走这条路,只需创建一个bash(或Python、Ruby等)脚本。
英文:
It's not entirely clear what your goal is here. If you just want to create an empty file, you can do it using the regular C standard library file functions, without calling out to a shell with system()
.
Something like this might suffice:
FILE *handle = fopen(filename, "w");
fclose(handle);
If the file already exists, but you want to "empty" it:
truncate(filename, 0);
Calling system()
to run some commands with file redirection is extremely non-portable and probably pointless. If you want to go down that path, just make a bash (or Python, or Ruby...) script.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论