---
name: "posix_spawnattr_setarchpref_np"
section: "3"
platform: "macos"
package: "xnu"
version: "12377.121.6"
release: "macOS 26.5"
platforms: ["macos"]
url: "https://new.carta.tech/posix_spawnattr_setarchpref_np"
---

# posix\_spawnattr\_setarchpref\_np(3)

set or get the cpu/subcpu preference attribute on a posix\_spawnattr\_t

## NAME

**posix\_spawnattr\_setarchpref\_np** **posix\_spawnattr\_getarchpref\_np** – set or get the *cpu/subcpu* *preference* attribute on a *posix\_spawnattr\_t*

## SYNOPSIS

**#include \<spawn.h\>**

*int*\

**posix\_spawnattr\_setarchpref\_np**(*posix\_spawnattr\_t \*restrict attr*, *size\_t count*, *cpu\_type\_t \*pref*, *cpu\_subtype\_t \*subpref*, *size\_t \*restrict ocount*);

*int*\

**posix\_spawnattr\_getarchpref\_np**(*const posix\_spawnattr\_t \*restrict attr*, *size\_t count*, *cpu\_type\_t \*pref*, *cpu\_subtype\_t \*subpref*, *size\_t \* restrict ocount*);

## IMPORTANT

These functions represent an Apple extension to [posix\_spawn(2)](/posix_spawn/2.md) and posix\_spawnp(2), and as such should not be used by programs intending their code to be portable to other platforms.

## DESCRIPTION

The **posix\_spawnattr\_setarchpref\_np**() function sets the precise universal binary preferences for the spawn attribute value referenced by *attr* from the memory containing the *cpu\_type\_t* referenced by  *pref* and the  *cpu\_subtype\_t* referenced by  *subpref* with a size of *count* elements; the actual number of elements that are set in the attribute is returned in *ocount*.

When spawn(2) or spawnp(2) is subsequently invoked on a Universal binary with the *posix\_spawnattr\_t*, the elements which were set will be used, in the order they were set, to select the first element in the list which matches any *cpu\_type\_t* and *cpu\_subtype\_t* of those available in the Universal binary.  If there is no match, then the attempt to create the child process will fail with the error EBADARCH. If the *cpu\_type\_t* *CPU\_TYPE\_ANY* and *cpu\_subtype\_t* *CPU\_SUBTYPE\_ANY* are the last pair in the list, then rather than returning EBADARCH on no match, the system will instead fall back to the standard Universal binary grading preference order. Using *CPU\_SUBTYPE\_ANY* as a *cpu\_subtype\_t* for any *cpu\_type\_t* value will select the best slice for that specific *cpu\_type\_t*, similar to using **posix\_spawnattr\_setbinpref\_np**(). If called multiple times on the same *attr*, the previous preferences will be overwritten.

The **posix\_spawnattr\_getarchpref\_np**() function gets the precise universal binary preferences for the spawn attribute value referenced by *attr* (set by a prior call to **posix\_spawnattr\_setbinpref\_np**() or **posix\_spawnattr\_setarchpref\_np**()) into the memory containing the *cpu\_type\_t* referenced by  *pref* and the *cpu\_subtype\_t* referenced by *subpref* with a prereserved size of *count* elements; the actual number of elements that are copied from the attribute is returned in *ocount*.

## RETURN VALUES

On success, these functions return 0; on failure they return an error number from ⟨errno.h⟩ and modify the value of *ocount*. Additionally, if successful, **posix\_spawnattr\_getarchpref\_np**() will modify the contents of the *pref* array with the current attribute values.

## ERRORS

These functions may fail if:

- \[EINVAL\]

  The value specified by *attr* is invalid.

- \[EINVAL\]

  The value of *attr* is invalid.

## SEE ALSO

[posix\_spawn(2)](/posix_spawn/2.md), posix\_spawnp(2), [posix\_spawnattr\_init(3)](/posix_spawnattr_init/3.md), [posix\_spawnattr\_destroy(3)](/posix_spawnattr_destroy/3.md), [posix\_spawnattr\_setbinpref\_np(3)](/posix_spawnattr_setbinpref_np/3.md), [posix\_spawnattr\_setflags(3)](/posix_spawnattr_setflags/3.md)

## STANDARDS

Nonstandard

## HISTORY

The **posix\_spawnattr\_setarchpref\_np**() and **posix\_spawnattr\_getarchpref\_np**() function calls appeared in macOS 10.16
