Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2016-01-20 14:05:48 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
ce8f3b447827eff0129822e0e2bd4aa9a2ace04c
ce8f3b44
1 parent
ae8bd4c2
refine the dup2 of stdout and stderr.
显示空白字符变更
内嵌
并排对比
正在显示
2 个修改的文件
包含
49 行增加
和
35 行删除
trunk/src/app/srs_app_process.cpp
trunk/src/kernel/srs_kernel_error.hpp
trunk/src/app/srs_app_process.cpp
查看文件 @
ce8f3b4
...
...
@@ -141,6 +141,43 @@ int SrsProcess::initialize(string binary, vector<string> argv)
return
ret
;
}
int
srs_redirect_output
(
string
from_file
,
int
to_fd
)
{
int
ret
=
ERROR_SUCCESS
;
// use default output.
if
(
from_file
.
empty
())
{
return
ret
;
}
// disable output.
if
(
from_file
==
SRS_CONSTS_NULL_FILE
)
{
::
close
(
to_fd
);
return
ret
;
}
// redirect the fd to file.
int
fd
=
-
1
;
int
flags
=
O_CREAT
|
O_WRONLY
|
O_APPEND
;
mode_t
mode
=
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
|
S_IROTH
;
if
((
fd
=
::
open
(
from_file
.
c_str
(),
flags
,
mode
))
<
0
)
{
ret
=
ERROR_FORK_OPEN_LOG
;
fprintf
(
stderr
,
"open process %d %s failed. ret=%d"
,
to_fd
,
from_file
.
c_str
(),
ret
);
exit
(
ret
);
}
if
(
dup2
(
fd
,
to_fd
)
<
0
)
{
ret
=
ERROR_FORK_DUP2_LOG
;
srs_error
(
"dup2 process %d failed. ret=%d"
,
to_fd
,
ret
);
exit
(
ret
);
}
::
close
(
fd
);
return
ret
;
}
int
SrsProcess
::
start
()
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -173,42 +210,19 @@ int SrsProcess::start()
signal
(
SIGINT
,
SIG_IGN
);
signal
(
SIGTERM
,
SIG_IGN
);
// redirect stdout to file.
if
(
!
stdout_file
.
empty
())
{
int
stdout_fd
=
-
1
;
int
flags
=
O_CREAT
|
O_WRONLY
|
O_APPEND
;
mode_t
mode
=
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
|
S_IROTH
;
if
((
stdout_fd
=
::
open
(
stdout_file
.
c_str
(),
flags
,
mode
))
<
0
)
{
ret
=
ERROR_ENCODER_OPEN
;
fprintf
(
stderr
,
"open process stdout %s failed. ret=%d"
,
stdout_file
.
c_str
(),
ret
);
exit
(
ret
);
}
// for the stdin,
// should never close it or ffmpeg will error.
if
(
dup2
(
stdout_fd
,
STDOUT_FILENO
)
<
0
)
{
ret
=
ERROR_ENCODER_DUP2
;
srs_error
(
"dup2 process stdout failed. ret=%d"
,
ret
);
exit
(
ret
);
}
}
// redirect stderr to file.
if
(
!
stderr_file
.
empty
())
{
int
stderr_fd
=
-
1
;
int
flags
=
O_CREAT
|
O_WRONLY
|
O_APPEND
;
mode_t
mode
=
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
|
S_IROTH
;
if
((
stderr_fd
=
::
open
(
stderr_file
.
c_str
(),
flags
,
mode
))
<
0
)
{
ret
=
ERROR_ENCODER_OPEN
;
fprintf
(
stderr
,
"open process stderr %s failed. ret=%d"
,
stderr_file
.
c_str
(),
ret
);
exit
(
ret
);
// for the stdout, ignore when not specified.
// redirect stdout to file if possible.
if
((
ret
=
srs_redirect_output
(
stdout_file
,
STDOUT_FILENO
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
if
(
dup2
(
stderr_fd
,
STDERR_FILENO
)
<
0
)
{
ret
=
ERROR_ENCODER_DUP2
;
srs_error
(
"dup2 process stderr failed. ret=%d"
,
ret
);
exit
(
ret
);
}
// for the stderr, ignore when not specified.
// redirect stderr to file if possible.
if
((
ret
=
srs_redirect_output
(
stderr_file
,
STDERR_FILENO
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
// should never close the fd 3+, for it myabe used.
...
...
trunk/src/kernel/srs_kernel_error.hpp
查看文件 @
ce8f3b4
...
...
@@ -202,8 +202,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define ERROR_ENCODER_VBITRATE 3027
#define ERROR_ENCODER_FORK 3028
#define ERROR_ENCODER_LOOP 3029
#define ERROR_ENCODER_OPEN 3030
#define ERROR_ENCODER_DUP2 3031
#define ERROR_FORK_OPEN_LOG 3030
#define ERROR_FORK_DUP2_LOG 3031
#define ERROR_ENCODER_PARSE 3032
#define ERROR_ENCODER_NO_INPUT 3033
#define ERROR_ENCODER_NO_OUTPUT 3034
...
...
请
注册
或
登录
后发表评论