You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言open系统调用实现Shell的>>追加功能?代码返回-1

解决自定义Shell中>>追加文件时open返回-1的问题

你的代码里open调用失败的核心原因是:当目标文件不存在时,仅使用O_WRONLY | O_APPEND不会自动创建文件,同时使用O_CREAT时必须指定文件权限参数。

修改后的代码如下:

int filedesc = open(inputargs[limit-1], O_WRONLY | O_APPEND | O_CREAT, 0644);
// printf("%s\n", inputargs[limit-1]);
if (filedesc < 0) {
    perror("Error opening file"); // 用perror打印具体错误原因,方便排查
} else {
    dup2(filedesc, 1);
}

关键修改点:

  • 添加O_CREAT标志:让open在文件不存在时自动创建它
  • 补充第三个参数0644:这是使用O_CREAT时必须指定的文件权限,代表所有者可读可写,组用户和其他用户只读(可根据需求调整)

另外,用perror替代printf输出错误信息,能显示具体的失败原因(比如权限不足、路径不存在等),更有助于排查问题。

内容的提问来源于stack exchange,提问作者Sreyash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:25:46