#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <fcntl.h> // open
#include <stdio.h>
int main() {
close(1); // close standard out
open("log.txt", O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);
puts("Captain's log");
chdir("/usr/include");
execl("/bin/ls", "ls", ".", (char *)NULL);
perror("exec failed");
return 0;
}
当我检查log.txt时,我找不到“船长日志”。我认为它在 execl 之前运行,因此它应该在那里!
最佳答案
您正在将其写入标准输出,为什么您希望它出现在文件中?
如果您想重定向stdout
,只需使用 freopen()
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
FILE *file;
file = freopen("log.txt", "w", stdout);
if (file == NULL)
return -1;
printf("Captain's log");
chdir("/usr/include");
if (execl("/bin/ls", "ls", ".", NULL) != 0)
perror("exec failed");
fclose(file);
return 0;
}
关于c - 为什么 execl 会覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28665166/