2017-07-03 41 views
1

我的代码写入文件如下。我是否需要担心任何错误情况? 我是否需要处理以下错误情况?关于I/O操作我是否需要处理以下代码中的任何错误情况?

1.Logical误差,对I/O操作

2.Read/writing误差,

3.Exception安全。

如果是,我该怎么做,如果没有,是否安全?

char command[150]={0}; 

sprintf(command, "/mypath/mycommand > %s", FileName); 

system(command); 
+0

是的,你应该经常检查错误,如果你调用失败的函数。但是(对于这种情况,使用'system')除非你尝试运行的命令返回命令本身的特定错误的特定错误代码,否则所有你会知道的是命令是否运行。它不是C++函数,因此不会抛出异常。 –

+0

此外,['sprintf'](http://en.cppreference.com/w/cpp/io/c/fprintf)函数在理论上也可能失败。很少有人从它那里检查错误,甚至没有经验丰富的程序员。我建议使用'snprintf'代替,以减少缓冲区溢出的风险。或者使用['std :: ostringstream'](http://en.cppreference.com/w/cpp/io/basic_ostringstream)。 –

+0

1您可以检查文件本身的存在。其次,在I/O操作期间,异常处理是必须的。但你必须自己做一些工作。我们可以指点,但可以做你想做的工作。 – MKR

回答

2

command可能会溢出,如果文件名是looooooooooooong。和system(3)返回-1上错误

参见man 3 system

返回的值是1的错误(例如,叉(2)失败),以及以其他方式命令的 返回状态。后者的返回状态是 ,采用wait(2)中指定的格式。因此,命令 的退出代码将为WEXITSTATUS(状态)。如果/ bin/sh不能执行, 退出状态将是退出命令的状态(127)。

如果命令的值为NULL,则如果shell 可用,则system()返回非零值;如果不可用,则返回0。

system()不会影响任何其他子级的等待状态。

也许输出文件应该被删除,如果发生错误。

0

我遵循的一般经验法则是墨菲定律:任何可能出错的东西最终都会出错。考虑到这一点,我总是检查错误和异常,除非有很好的理由检查错误是不必要的或多余的。但是,这些情况大部分也保持在最低限度。

在你的代码的情况下,我会提出相同的建议:是否总是安全地忽略你的代码的错误代码?如果代码遇到错误,是否有任何特定的操作?看看你的代码,我相信有几件事情可能会出错(mycommand被用户删除/移动/重命名,其执行权限被改变等)。这些会影响你的程序的其余部分吗?

相关问题