Patch #543447: Add posix.mknod.

This commit is contained in:
Martin v. Löwis 2002-04-14 10:19:44 +00:00
parent 314fc79ce8
commit 06a83e90aa
6 changed files with 60 additions and 7 deletions

View File

@ -644,6 +644,17 @@ the client opens it for writing. Note that \function{mkfifo()}
doesn't open the FIFO --- it just creates the rendezvous point. doesn't open the FIFO --- it just creates the rendezvous point.
\end{funcdesc} \end{funcdesc}
\begin{funcdesc}{mknod}{path\optional{, mode=0600, major, minor}}
Create a filesystem node (file, device special file or named pipe)
named filename. mode specifies both the permissions to use and the
type of node to be created, being combined (bitwise OR) with one of
S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO (those constants are available
in \module{stat}). For S_IFCHR and S_IFBLK, major and minor define the
newly created device special file, otherwise they are ignored.
\versionadded{2.3}
\end{funcdesc}
\begin{funcdesc}{mkdir}{path\optional{, mode}} \begin{funcdesc}{mkdir}{path\optional{, mode}}
Create a directory named \var{path} with numeric mode \var{mode}. Create a directory named \var{path} with numeric mode \var{mode}.
The default \var{mode} is \code{0777} (octal). On some systems, The default \var{mode} is \code{0777} (octal). On some systems,

View File

@ -56,6 +56,8 @@ Core and builtins
Extension modules Extension modules
- posix.mknod was added.
- The locale module now exposes the C library's gettext interface. - The locale module now exposes the C library's gettext interface.
- A security hole ("double free") was found in zlib-1.1.3, a popular - A security hole ("double free") was found in zlib-1.1.3, a popular

View File

@ -4582,19 +4582,52 @@ posix_pipe(PyObject *self, PyObject *args)
#ifdef HAVE_MKFIFO #ifdef HAVE_MKFIFO
static char posix_mkfifo__doc__[] = static char posix_mkfifo__doc__[] =
"mkfifo(file, [, mode=0666]) -> None\n\ "mkfifo(filename, [, mode=0666]) -> None\n\
Create a FIFO (a POSIX named pipe)."; Create a FIFO (a POSIX named pipe).";
static PyObject * static PyObject *
posix_mkfifo(PyObject *self, PyObject *args) posix_mkfifo(PyObject *self, PyObject *args)
{ {
char *file; char *filename;
int mode = 0666; int mode = 0666;
int res; int res;
if (!PyArg_ParseTuple(args, "s|i:mkfifo", &file, &mode)) if (!PyArg_ParseTuple(args, "s|i:mkfifo", &filename, &mode))
return NULL; return NULL;
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
res = mkfifo(file, mode); res = mkfifo(filename, mode);
Py_END_ALLOW_THREADS
if (res < 0)
return posix_error();
Py_INCREF(Py_None);
return Py_None;
}
#endif
#ifdef HAVE_MKNOD
static char posix_mknod__doc__[] =
"mknod(filename, [, mode=0600, major, minor]) -> None\n\
Create a filesystem node (file, device special file or named pipe)\n\
named filename. mode specifies both the permissions to use and the\n\
type of node to be created, being combined (bitwise OR) with one of\n\
S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. For S_IFCHR and S_IFBLK,\n\
major and minor define the newly created device special file, otherwise\n\
they are ignored.";
static PyObject *
posix_mknod(PyObject *self, PyObject *args)
{
char *filename;
int mode = 0600;
int major = 0;
int minor = 0;
int res;
if (!PyArg_ParseTuple(args, "s|iii:mknod", &filename,
&mode, &major, &minor))
return NULL;
Py_BEGIN_ALLOW_THREADS
res = mknod(filename, mode, makedev(major, minor));
Py_END_ALLOW_THREADS Py_END_ALLOW_THREADS
if (res < 0) if (res < 0)
return posix_error(); return posix_error();
@ -6336,6 +6369,9 @@ static PyMethodDef posix_methods[] = {
#ifdef HAVE_MKFIFO #ifdef HAVE_MKFIFO
{"mkfifo", posix_mkfifo, METH_VARARGS, posix_mkfifo__doc__}, {"mkfifo", posix_mkfifo, METH_VARARGS, posix_mkfifo__doc__},
#endif #endif
#ifdef HAVE_MKNOD
{"mknod", posix_mknod, METH_VARARGS, posix_mknod__doc__},
#endif
#ifdef HAVE_FTRUNCATE #ifdef HAVE_FTRUNCATE
{"ftruncate", posix_ftruncate, METH_VARARGS, posix_ftruncate__doc__}, {"ftruncate", posix_ftruncate, METH_VARARGS, posix_ftruncate__doc__},
#endif #endif

5
configure vendored
View File

@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# From configure.in Revision: 1.306 . # From configure.in Revision: 1.307 .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.53. # Generated by GNU Autoconf 2.53.
# #
@ -11243,12 +11243,13 @@ echo "${ECHO_T}MACHDEP_OBJS" >&6
for ac_func in alarm chown chroot clock confstr ctermid ctermid_r execv \ for ac_func in alarm chown chroot clock confstr ctermid ctermid_r execv \
flock fork fsync fdatasync fpathconf ftime ftruncate \ flock fork fsync fdatasync fpathconf ftime ftruncate \
gai_strerror getgroups getlogin getpeername getpid getpwent getwd \ gai_strerror getgroups getlogin getpeername getpid getpwent getwd \
hstrerror inet_pton kill killpg link lstat mkfifo mktime mremap \ hstrerror inet_pton kill killpg link lstat mkfifo mknod mktime mremap \
nice pathconf pause plock poll pthread_init \ nice pathconf pause plock poll pthread_init \
putenv readlink \ putenv readlink \
select setegid seteuid setgid setgroups \ select setegid seteuid setgid setgroups \

View File

@ -1568,7 +1568,7 @@ AC_MSG_RESULT(MACHDEP_OBJS)
AC_CHECK_FUNCS(alarm chown chroot clock confstr ctermid ctermid_r execv \ AC_CHECK_FUNCS(alarm chown chroot clock confstr ctermid ctermid_r execv \
flock fork fsync fdatasync fpathconf ftime ftruncate \ flock fork fsync fdatasync fpathconf ftime ftruncate \
gai_strerror getgroups getlogin getpeername getpid getpwent getwd \ gai_strerror getgroups getlogin getpeername getpid getpwent getwd \
hstrerror inet_pton kill killpg link lstat mkfifo mktime mremap \ hstrerror inet_pton kill killpg link lstat mkfifo mknod mktime mremap \
nice pathconf pause plock poll pthread_init \ nice pathconf pause plock poll pthread_init \
putenv readlink \ putenv readlink \
select setegid seteuid setgid setgroups \ select setegid seteuid setgid setgroups \

View File

@ -260,6 +260,9 @@
/* Define to 1 if you have the `mkfifo' function. */ /* Define to 1 if you have the `mkfifo' function. */
#undef HAVE_MKFIFO #undef HAVE_MKFIFO
/* Define to 1 if you have the `mknod' function. */
#undef HAVE_MKNOD
/* Define to 1 if you have the `mktime' function. */ /* Define to 1 if you have the `mktime' function. */
#undef HAVE_MKTIME #undef HAVE_MKTIME